如何優雅的寫出你的SQL語句?網友:竟然還有這種騷操作~

毫無疑問,編寫代碼是一門藝術而非科學,沒有程序員可以編寫出既可讀又可維護的漂亮代碼,即使有經驗也是如此。

一般來說,當您學習編碼的藝術時,編碼水平會隨着經驗而提高,例如,你會變得更喜歡組合而不是繼承或更喜歡接口而不是實現,但是隻有少數開發人員能夠掌握這些技術。

SQL查詢也是如此。您構建查詢的方式,您編寫它的方式,如果正確的話,可以很好地將您的意圖傳達給其他開發人員。

常常,在我看到來自多個開發人員的電子郵件中的SQL查詢時,我能看出他們的編寫風格的顯著差異。一些開發人員編寫得非常整潔,並且對查詢進行了適當的縮進,這使得很容易發現關鍵細節,例如,從哪個表中提取哪些列以及哪些是條件。

因爲在實際的項目中,SQL查詢並不是單行的,所以當您需要以後閱讀這些SQL查詢或需要將該查詢共享給某人進行檢查或執行時,這種情況下,學習正確的編寫SQL查詢的方式會帶來很大的不同。

在本文中,我將向您展示一些我過去嘗試過的編寫風格,介紹它們的優缺點以及我認爲最好的SQL查詢編寫方式。

除非你有很好的理由不使用我推薦的風格,例如:你有更好的風格,或者你想堅持項目中一直使用的風格(一致性壓倒一切),沒有理由不使用它。

順便說一句,我希望您熟悉SQL,瞭解SQL查詢中的不同子句及其含義。如果不是,你最好通過參加一個很好的課程來獲得SQL經驗,比如:

From 0 To 1:SQL And Databases — Heavy Lifting by Loony Corn

Introduction to SQL by Jon Flanders

我強烈推薦後者。

# 第一種寫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)使用了大小寫混合將關鍵字從列和表名之間分開,如SELECT使用大寫,而Employee使用首字母大寫,但如果你喜歡一致性的話,可以讓from關鍵字也大寫,沒有研究只顯示那種寫法更好。

缺點:

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) SQL查詢被劃分爲多行,使其更具可讀性

問題

1)大小寫混合

2) where子句上的所有條件位於同一行上,也就是說通過註釋排除它們不是那麼容易。

# 第三種書寫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)使用適當的縮進可以很容易地找到數據源,例如表和join

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格式器,但我建議您學習一種樣式並堅持使用它,而不是依賴於格式器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章