如何更优雅的写出你的SQL语句
生活随笔
收集整理的這篇文章主要介紹了
如何更优雅的写出你的SQL语句
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
毫無疑問,編寫代碼是一門藝術(shù)而非科學,沒有程序員可以編寫出既可讀又可維護的漂亮代碼,即使有經(jīng)驗也是如此。一般來說,當您學習編碼的藝術(shù)時,編碼水平會隨著經(jīng)驗而提高,例如,你會變得更喜歡組合而不是繼承或更喜歡接口而不是實現(xiàn),但是只有少數(shù)開發(fā)人員能夠掌握這些技術(shù)。SQL查詢也是如此。您構(gòu)建查詢的方式,您編寫它的方式,如果正確的話,可以很好地將您的意圖傳達給其他開發(fā)人員。常常,在我看到來自多個開發(fā)人員的電子郵件中的SQL查詢時,我能看出他們的編寫風格的顯著差異。一些開發(fā)人員編寫得非常整潔,并且對查詢進行了適當?shù)目s進,這使得很容易發(fā)現(xiàn)關(guān)鍵細節(jié),例如,從哪個表中提取哪些列以及哪些是條件。因為在實際的項目中,SQL查詢并不是單行的,所以當您需要以后閱讀這些SQL查詢或需要將該查詢共享給某人進行檢查或執(zhí)行時,這種情況下,學習正確的編寫SQL查詢的方式會帶來很大的不同。在本文中,我將向您展示一些我過去嘗試過的編寫風格,介紹它們的優(yōu)缺點以及我認為最好的SQL查詢編寫方式。
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;優(yōu)點:使用了大小寫混合將關(guān)鍵字從列和表名之間分開,如SELECT使用大寫,而Employee使用首字母大寫,但如果你喜歡一致性的話,可以讓from關(guān)鍵字也大寫,沒有研究只顯示那種寫法更好。
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;
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查詢劃分為多行可以提高可讀性
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 >?5000順便說一句,如果您喜歡用大寫字母表示關(guān)鍵字,您還可以編寫如下所示的相同的SQL查詢,這些規(guī)則是相同的,只是關(guān)鍵字是大寫字母。
除非你有很好的理由不使用我推薦的風格,例如:你有更好的風格,或者你想堅持項目中一直使用的風格(一致性壓倒一切),沒有理由不使用它。
順便說一句,我希望您熟悉SQL,了解SQL查詢中的不同子句及其含義。如果不是,你最好通過參加一個很好的課程來獲得SQL經(jīng)驗。
第一種寫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;優(yōu)點:使用了大小寫混合將關(guān)鍵字從列和表名之間分開,如SELECT使用大寫,而Employee使用首字母大寫,但如果你喜歡一致性的話,可以讓from關(guān)鍵字也大寫,沒有研究只顯示那種寫法更好。
缺點:
1)大小寫混合
2)整個查詢寫在一行上,一旦表和列的數(shù)量增加,這一行就不可讀了
3)在添加新條件或刪掉條件時沒有靈活性
第二種書寫SQL查詢的方式
SELECT?e.emp_id, e.emp_name, d.dept_name, p.project_namefrom?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_namefrom?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)使用適當?shù)目s進可以很容易地找到數(shù)據(jù)源,例如表和join
3)讓條件語句都放在單獨的行上,可以容易的注釋掉某個條件進行調(diào)試。
select?e.emp_id, e.emp_name, d.dept_namefrom?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 >?5000順便說一句,如果您喜歡用大寫字母表示關(guān)鍵字,您還可以編寫如下所示的相同的SQL查詢,這些規(guī)則是相同的,只是關(guān)鍵字是大寫字母。
這就是我要說的如何編寫可讀和更易于維護的SQL查詢。對于SQL查詢的縮進或樣式化,您有什么看法?
這是一種簡單的技術(shù),但非常強大,對于提高涉及多個連接的復(fù)雜SQL查詢的可讀性大有幫助,如我前面的示例所示。
如果您喜歡,也可以在網(wǎng)上使用各種SQL格式器,但我建議您學習一種樣式并堅持使用它,而不是依賴于格式器。
總結(jié)
以上是生活随笔為你收集整理的如何更优雅的写出你的SQL语句的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 3 5_零基础学Pytho
- 下一篇: 开发中常用的19 条 MySQL 优化技