SQL 高效排版指北
統一 SQL 排版的相關用法,極大提高編寫和維護 SQL 的效率。
注: column = 選取的字段;table = 選取的表名
語句結構
錯誤
SELECT column1 FROM table1 ORDER BY column1
正確
SELECT
column1
FROM
table1
ORDER BY
column1
解析
SQL 語句在內部執行時會解析成樹狀展開的結構,SELECT,FROM,WHERE 等關鍵字定義了結構體,這些關鍵詞統一使用大寫并配合縮進來直觀的區分內容和結構。
判斷條件
錯誤
SELECT column1 FROM table1 WHERE column1=1 AND column2 = 2
正確
SELECT
column1
FROM
table1
WHERE
column1 = 1
AND column2 = 2
解析
同一級別的語句塊保持相等距離的縮進,AND 放置在條件前面。
子查詢
錯誤
SELECT L.column1 FROM (SELECT column1 FROM table1 ) as L
正確
SELECT
L.column1
FROM
(
SELECT
column1
FROM
table1
) as L
解析
子查詢會成為一個完整的表嵌入到上層的結構中,子查詢的內部又是一個完整的結構體,當然也要使用縮進來定義結構,并且整體要往后縮進一個層次,與上層結構配合。
連接
錯誤
SELECT table1.column1,table2.column2 FROM table1 LEFT JOIN table2 ON table1.column1 = table2.column1
正確
SELECT
table1.column1
,table2.column2
FROM
table1
LEFT JOIN
table2
ON
table1.column1 = table2.column1
解析
JOIN 后兩張表會形成一張新的大表,該大表需要保持縮進來嵌入到上層,同時內部的兩種表也要通過縮進維持結構。
逗號
錯誤
SELECT column1,column2,column3 FROM table1
正確
SELECT
column1
,column2
,column3
FROM
table1
解析
讀者剛開始將逗號前置可能會不太習慣,但這樣做會顯著的帶來兩個好處,第一:長的SQL語句往往選取的字段長短不一,若將逗號放在后面,當缺失逗號時很難發現,放在前面就很容易排查,第二:調試 SQL 語句時,注釋掉最后一個字段,也可以直接運行,減少調試時間。
長函數
錯誤
SELECT concat(column1,column2,column3) FROM table1
正確
SELECT
concat( column1
,column2
,column3)
FROM
table1
解析
當長的函數十分復雜時,若沒有清晰的結構,很容易寫完就忘。函數與函數參數也是呈子母對的性質,那么它們也就具有樹狀的表達結構,通過縮進形式也可以展現出這種樹狀結構。
舉個栗子
錯誤
SELECT L.column1,R.column2,concat(L.column1,R.column2) FROM (SELECT column1 ,column3FROM table1) AS L LEFT JOIN
(SELECT column2,column3FROM table2) AS R ON L.column3 = R.column3 WHERE L.column1 = 1 AND R.column1 = 2 GROUP
BY L.column1,R.column2 ORDER BY L.column1,R.column2
正確
SELECT
L.column1
,R.column2
,concat(L.column1
,R.column2)
FROM
(
SELECT
column1
,column3
FROM
table1
) AS L
LEFT JOIN
(
SELECT
column2
,column3
FROM
table2
) AS R
ON
L.column3 = R.column3
WHERE
L.column1 = 1
AND R.column1 = 2
GROUP BY
L.column1
,R.column2
ORDER BY
L.column1
,R.column2
解析
再復雜的語句也可以通過這樣的方式拆分以增加可讀性,在后期調試時也十分方便。
結語
知行合一:這個方法可以加深讀者對 SQL 的理解,在練習的過程中仔細體會這種語法的樹狀結構,假以時日就可以掌握。
怎么學習函數:各種函數看似紛繁多樣,其實基礎結構十分簡單,所有的函數都是圍繞數字,文本,日期這三種數據類型,再輔以一些結構和增刪查改的過程來展開。運用函數的過程就是邏輯上對這三種類型進行運算,再通過邏輯去搜索函數,最后組合起來達到想要目的的過程。so,學習函數就是掌握(數字,文本,日期)*增刪查改 ,這一表達式的過程。
如何融會貫通:隨著練習的深入,讀者可以感受到寫 SQL 就像折紙一樣,它們面向的對象都是矩陣,而所有的數據產品:Excel,Hive,Tableau等等都是在處理矩陣對象,只是表達方式和面對的場景不同才有所差異,本質上殊途同歸。當讀者對矩陣概念有比較清晰的概念時就可以達到一通百通的層次。