毫無疑問,編寫代碼更像是一門藝術,而不是一門科學。即使有經驗,每個編碼人員也無法編寫既可讀又可維護的優美代碼。一般來說,當您學習編碼藝術時,編碼會随着經驗而提高。例如,組合重于繼承或編碼接口大于實作,但隻有少數開發人員能夠掌握這些技術。
SQL查詢也是如此。建構查詢的方式和編寫查詢的方式對向開發人員傳達你的意圖有很大幫助。當我看到來自多個開發人員的電子郵件上的SQL查詢時,我可以看到他們的寫作風格有很大的不同。
有些開發人員寫得非常整潔,并且正确地縮進了查詢,這樣就很容易發現關鍵的細節,例如從哪個表中提取哪些列,以及條件是什麼。
由于在實際項目中,sql查詢幾乎不是單行的,是以學習正确的SQL查詢方法會在以後自己閱讀或者将該查詢分享給某人進行審查或執行時,産生很大的不同。
在這篇文章中,我将向你展示我在過去嘗試過的幾種風格,它們的優缺點,以及我認為編寫SQL查詢的最佳方法。除非你有充分的理由不使用我的風格,例如你有一個更好的風格,或者你想堅持你的項目中使用的風格(遵循一緻性),否則沒有理由不使用它。
順便說一句,我希望你熟悉SQL,并且在SQL查詢中了解不同的子句及其含義。如果不是,最好通過一些好的課程來獲得一些SQL方面的經驗:
1. 《 The Complete SQL Bootcamp》,資料科學家喬希·波蒂拉
2. 《SQLfornewbs:初學者的資料分析》,大衛·金和彼得·塞夫頓
以上是我通常向SQL初學者推薦的兩門課程。
編寫SQL查詢的第一種方法
SELECT e.emp_id, e.emp_name, d.dept_name, p.project_name from Employee e
INNER JOIN Department d ON e.dept_id = d.dept_id INNER JOIN Projects p
ON e.project_id = p.project_id Where d.dept_name="finance" and e.emp_name
like '%A%' and e.salary > 5000;
複制
優點:
1)混合大小寫,将關鍵字與列名/表名分離開來。
缺點:
1)混合案例
2)整個查詢都寫在一行上,一旦表和列的數量增加,就無法讀取
3)在添加新條件或沒有現有條件的情況下運作時,沒有靈活性
編寫SQL查詢的第二種方法
SELECT e.emp_id, e.emp_name, d.dept_name, p.project_name
from Employee e
INNER JOIN Department d ON e.dept_id = d.dept_id
INNER JOIN Projects p ON e.project_id = p.project_id
Where d.dept_name="finance" and e.emp_name like '%A%' and e.salary > 500;
複制
改進:
1)将查詢分成多行,使其更具可讀性。
問題:
1)混合案例
2)所有條件都在同一行上,即通過注釋排除某些代碼,不是那麼容易。

編寫SQL查詢的第三種方法
select e.emp_id, e.emp_name, d.dept_name
from Employee e
inner join Department d on e.dept_id = d.dept_id
where d.dept_name = 'finance'
and e.emp_name like '%A%'
and e.salary > 500;
複制
1)将SQL查詢劃分為多行,使其更具可讀性。
2)使用适當的縮進可以友善地識别資料源,即表和連接配接。
3)在單獨的行上設定條件,允許你通過對其中一個條件進行注釋來運作查詢,例如:
select e.emp_id, e.emp_name, d.dept_name
from Employee e
inner join Department d on e.dept_id = d.dept_id
where d.dept_name = 'finance'
-- and e.emp_name like '%A%';
add e.salary > 5000
如果你喜歡關鍵字為大寫,也可以編寫如下所示的SQL查詢,規則是相同的,隻是關鍵字是大寫字母。
這就是如何編寫可讀且更易于維護的SQL查詢。可以自由地就你對這種縮進或SQL查詢樣式的看法發表意見。這是一種簡單的技術,但功能非常強大,對于提高複雜SQL查詢的可讀性有很大幫助。如果你願意,也可以線上使用各種SQL格式化程式,但我建議你學習一種風格并堅持使用它,而不是依賴格式化程式。
延伸閱讀
Introduction to SQL
The Complete SQL Bootcamp
SQL for Newbs: Data Analysis for Beginners
5 Free Courses to Learn SQL and Database
原文标題《The Best Way to Write a SQL Query》
作者:Javin Paul
譯者:lemon
不代表雲加社群觀點,更多詳情請檢視原文連結