<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2700字,需瀏覽 6分鐘

           ·

          2021-10-23 09:49

          來源:https://blog.csdn.net/weixin_28995873/article/details/113295467


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


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


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


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


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


          在本文中,我將向您展示一些我過去嘗試過的編寫風格,介紹它們的優(yōu)缺點以及我認為最好的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;

          優(yōu)點:


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


          缺點:


          1)大小寫混合


          2)整個查詢寫在一行上,一旦表和列的數(shù)量增加,這一行就不可讀了


          3)在添加新條件或刪掉條件時沒有靈活性


          # 第二種書寫SQL查詢的方式


          SELECT e.emp_id, e.emp_name, d.dept_name, p.project_namefrom Employee eINNER JOIN Department d ON e.dept_id = d.dept_idINNER JOIN Projects p ON e.project_id = p.project_idWhere 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 einner join Department d on e.dept_id = d.dept_idwhere d.dept_name = 'finance'and e.emp_name like '%A%'and e.salary > 500;

          1)將SQL查詢劃分為多行可以提高可讀性


          2)使用適當?shù)目s進可以很容易地找到數(shù)據源,例如表和join


          3)讓條件語句都放在單獨的行上,可以容易的注釋掉某個條件進行調試。

          select e.emp_id, e.emp_name, d.dept_namefrom Employee einner join Department d on e.dept_id = d.dept_idwhere d.dept_name = 'finance'-- and e.emp_name like '%A%';add e.salary > 5000

          順便說一句,如果您喜歡用大寫字母表示關鍵字,您還可以編寫如下所示的相同的SQL查詢,這些規(guī)則是相同的,只是關鍵字是大寫字母。



          這就是我要說的如何編寫可讀和更易于維護的SQL查詢。對于SQL查詢的縮進或樣式化,您有什么看法?


          這是一種簡單的技術,但非常強大,對于提高涉及多個連接的復雜SQL查詢的可讀性大有幫助,如我前面的示例所示。


          如果您喜歡,也可以在網上使用各種SQL格式器,但我建議您學習一種樣式并堅持使用它,而不是依賴于格式器。


          (完)


          ?關注公眾號:Java后端編程,回復下面關鍵字?

          要Java學習完整路線,回復??路線?

          缺Java入門視頻,回復?視頻?

          要Java面試經驗,回復??面試?

          缺Java項目,回復:?項目?

          進Java粉絲群:?加群?


          PS:如果覺得我的分享不錯,歡迎大家隨手點贊、在看。

          (完)




          加我"微信"?獲取一份 最新Java面試題資料

          請備注:666,不然不通過~


          最近好文


          1、GitHub 近兩萬 Star,可一鍵生成前后端代碼

          2、Spring 官方為什么建議構造器注入?

          3、10000 字講清楚 Spring Boot 注解原理

          4、13個優(yōu)秀的 Vue 開源項目及合集推薦

          5、Java項目實戰(zhàn):利用注解 + 反射消除重復代碼



          最近面試BAT,整理一份面試資料Java面試BAT通關手冊,覆蓋了Java核心技術、JVM、Java并發(fā)、SSM、微服務、數(shù)據庫、數(shù)據結構等等。
          獲取方式:關注公眾號并回復?java?領取,更多內容陸續(xù)奉上。
          明天見(??ω??)??

          瀏覽 59
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久国产乱子伦精品一区二区豆花 | 日韩无码免费 | 天天综合入口 | 日韩在线视频网站 | 日韩无修正 |