SQL編程格式的優化建議
在使用SQL編程的時候,我是否有一套可行的編程規範?我們是否考慮了代碼的可讀性、可移植性和性能么?本文的目的也在於此,總結各資料庫的大神相關的SQL編寫風格,利用當前可用的工具與插件優化我們的SQL編寫過程,讓每一個數據從業者的生活更加美好。話不多說,走起來。
SQL編程風格
本部分總結自《Joe Celko"s SQL Programming Style》,通過這位大師見聞與親身經歷,詳細說明了我們應該遵循哪些規則,讓我們跟著這位大師的腳本走進美妙的SQL世界。
Joe Celko 世界著名資料庫專家,曾擔任ANSI SQL標準委員會成員10年之久,也是世界上讀者數量的SQL圖書作者之一
命名的建議
- 使用統一的、描述性強的欄位命名規則
- 保證欄位名是獨一無二且不是保留字的,不要使用連續的下劃線,不用下劃線結尾
- 最好以字母開頭
id 標識符——user_id 用戶標識 item_id 商品標識
dt 表示某個事件發生的時間——ord_dt 訂單時間 exam_dt 考試時間num 表示某事相關的數字——sale_num 銷量name 用字母表示名稱——stu_name 學生名 等格式建議
select name,id,sexfrom (select *from school_scorewhere class_cd=110)where sex = "man"and exam_dt = "2016-06-01";--空白隔道+垂直間距+大小寫+縮進SELECT name, id, sex FROM (SELECT * FROM school_score WHERE class_cd = 110) WHERE sex = "man" AND exam_dt = "2016-06-01";
- 利用空格保持關鍵字對齊
- 在等號前後(=)在逗號後(,)單引號前後(")加上空格
- 子查詢縮進並對齊
感受下是不是下面的看得更清晰有序呢
語法建議
- 盡量使用BETWEEN而不是多個AND
- 同樣,使用 IN 而不是多個OR
- 利用CASE語句嵌套處理更複雜的邏輯結構
- 避免UNION語句與臨時表
SELECT CASE postcode WHEN "BN1" THEN "Brighton" WHEN "EH1" THEN "Edinburgh" END AS city FROM office_locations WHERE country = "United Kingdom" AND opening_time BETWEEN 8 AND 9 AND postcode IN ("EH1", "BN1", "NN1", "KW1");
TOOLS
SQL編碼風格說完了,該來點實在的了,畢竟大家寶貴的時間不能浪費在細心敲空格與檢查是否對齊上。
給大家介紹個插件很強大SQLinForm(SQL Formatter for Professionals - Also Free Online SQL Beautifiers & Plugins available),小到支持NOTEPAD編輯器的插件大到直接對接資料庫軟體,甚至可以網站上在線優化格式,不管你的格式有多爛只要語法正確,SQLinForm保證服務滿意,轉換姿勢多種多樣,只有你想不到的,沒有她滿足不了的,沒收廣告費,我也就不吹了,看一波操作。
進入官網的在線測試功能Online SQL Formatter,這兒有一堆很亂的SQL代碼,我們要優化它,這兒我簡單設置下代碼風格,保持與我上部分介紹的內容相同,做一個。- keywords 關鍵字 這兒我們選擇Left Justify,保持右對齊
- Linebreaks 換行 選擇After comma ,讓每句的逗號放在句末
- Brackets 括弧 這兒根據各自的口味選擇,我沒變動
- Indention 縮進 我選擇4 spaces 默認為10個空格,感覺有點太長了
- Alignment 對齊 同樣根據自己需求來,默認保持了關鍵字、逗號對齊
- CASE CASE格式 我取消了THEN後換行 ,保持了同一個WHEN THEN邏輯同一行
點擊FORMAT SQL,最後輸出如下:
SELECT price.col1 AS col1 , price.col2 AS col2 , price.col3 AS col3 , MAX(price.col4) AS col4 , CASE WHEN age > 20 THEN 100 ELSE 99 END AS col12, MAX(price.col5) AS col5 , MAX(price.col6) AS col6 , MAX(price.col7) AS col7FROM Table1 t1 INNER JOIN Table2 T2 ON column1 = col2 AND col2 = column3WHERE column1OfTable2 = "abcde"AND ( column7 = "abc123" OR col5 >= 123 )AND volume = 123GROUP BY col1 , column2, tableCol3ORDER BY Column1 , col2 , columName3, c4
對於Sublime重度愛好者可以安裝zsong/SqlBeautifier插件,CTRL+K 加 CTRT+F 實現格式轉換,相比SQLinForm,自定義功能略顯單薄,但也足夠可用。
喜歡離線操作的老鐵,可以使用Notepad++的用戶可以安裝插件或者下載官方編程程序,勾選LIVE FORMATTING,實現實時自動整理格式的功能。
一邊敲一邊自動整理格式,精準而優雅
白衣勝雪,劍若秋水
更多關於python數據分析與挖掘內容請關注我的專欄:數與碼
或者關注我的知乎賬號:知行
專欄持續更新中,求贊求關注
文章如有不妥之處,歡迎朋友一起討論
推薦閱讀:
※【知乎】與【Quora】數據對比
※美美的商務范兒——蝴蝶圖
※賈乃亮發文背後的數據
※有哪些學習數據分析的網站
※簡單介紹一下我們的Dota2數據平台