給你一個復雜sql連接不同的表,多個嵌套查詢條件等的語句時,你是非常的膽怯由於對語法的不熟悉以及沒有經驗和自信,現在我們來學習一下如何寫復雜的sql,我們把它分解為很多小的步驟進行
一、集中最后的輸出結果
開始在頭腦中想到要輸出的最終結果並且寫下期待的結果集從查詢中得到的,評估有多少記錄你需要取回並且哪些表用於這些結果的輸出。
二、理解數據庫表關系
主要理解這些表之間的關系是一對一,還是一對多,還是多對多關系,ER圖更能理清它們之間的關系,確保你需要哪些字段在這個表中進行連接。
三、將查詢拆分為可管理的部分
請記住你不必須一個寫下完整的sql語句。首先要確定表所需要的連接,並適當的引入相應的表。記住那個復雜的sql是簡單sql的集合。測試那個查詢在每個階段一個接一個確保輸出我們需要得到的結果。 一旦查詢被創建,就應該在添加新表時一次又一次的進行測試。
四、聚合結果集
這是使用Group By語句聚合不同結果集的時間。您還可以根據需要使用多個聚合函數,如COUNT、MAX、SUM、MIN、SUM或AVG等。此外,如果結果集的順序很重要,那么將它們按照語句order的正確順序排列。
五、確保查詢容易讀
在需要的地方為SQL查詢添加注釋。不要添加不必要的注釋,否則會使查詢變得冗長乏味。請記住,SQL語句越長,執行語句就需要越多的帶寬。盡量使用大多數開發人員經常使用的標准約定。
六、其它考慮的因素
對於一個復雜的sql查詢,為查詢使用存儲過程是很常見的,但是在編寫復雜的SQL查詢時還需要考慮許多其他事實。
(1)復雜的sql查詢是不可移植的對於其它數據庫.
(2)眾所周知,當調試很少時,測試是非常困難的.
(3)它們減少了應用服務器上的負載,但增加了web服務器上的負載.
您可以使用簡單的SQL語句,然后在需要時使用更多的SQL語句將它們循環起來。經驗豐富的數據庫開發人員絕不會推薦這種方法,因為它既困難又混亂。最好的方法是實踐SQL代碼,並使用正確的技術或方法提高編寫復雜SQL查詢的效率。
七、為什么你應該避免復雜sql查詢
一個復雜的SQL查詢是許多連接和子查詢的組合,很快您就會意識到長查詢也是bug的根源,因此,這里的問題是,要么您應該尋找原始創建者來調試查詢,要么您應該自己重新設計查詢,以深入理解隱藏的復雜性。
復雜SQL查詢的最大好處是從多個數據源獲取數據,但是當開發人員過度使用時,它可能會產生問題。對於復雜的SQL查詢,開發人員必須定義不同數據塊之間的關系、連接表、對結果集進行分組、對結果集進行排序等等。
當您對修改數據庫模式感興趣時,它通常涉及重新設計查詢,有時候,開發人員不喜歡更改數據模型,因為他們害怕重新創建大量SQL查詢並將其按指定的順序排列。
當復雜的SQL查詢設計帶來如此多的麻煩時,大多數開發人員都對使用替代方案(如果有的話)感興趣.
八、復雜的sql查詢替代方案。
對於復雜的SQL查詢,有兩種流行的替代方法,如下所示。
(1)使用大量的小的sql查詢。
(2)你可以使用查詢生成器。
第一個方案是簡單的,而不是用一個包含所有內容的大型查詢來訪問數據庫,將查詢分解為更小的可管理單元。編寫多個子查詢來獲取不同的數據段,單獨處理它們,而不是一直使用聚合函數。對於新手程序員來說,它是最強大的方法,可以幫助徹底理解復雜的查詢,而不必直接跳到最高效的解決方案。
當您希望使用小型查詢時,不要忘記考慮效率方面的權衡。小查詢通常不太傾向於管理職責,它們可以在不同的情況下自由應用。根據經驗豐富的dba的說法,帶有一組選定職責的小型查詢通常很適合他們的工作,易於調試,而且語法錯誤也更少。
第二種方案涉及使用查詢生成器。將大型查詢分解為描述查詢不同方面的小的可管理部分,這是最好的方法。它將提供一組具有共享概念的多個查詢。您可以單獨處理特定的集合,並嘗試對其進行全面的邏輯或語法錯誤測試,以便稍后成功執行。