SQL執行順序及where、group by及having


一、SQL的書寫與執行順序
SQL語句書寫順序select、form、where、group by、having、select、order by、limit 
SQL語句執行順序 from、where、group by、having、select、order by、limit
當然如果有join,肯定優先級是join,接下來是from之后的數據。
 
 二、 WHERE、GROUP BY 和 HAVING 子句的正確順序
1、舉例說明:存在以下表格,我們用來做演示:其中(project_id,employee_id)是主鍵

 

理解應用 WHERE、GROUP BY 和 HAVING 子句的正確順序對編寫高效的查詢代碼會有所幫助:

2、若要取員工最多的項目,則結果是【1、2、5】:分析步驟,只要對項目分組,並取得每個分組中員工數,然后取這個最大員工數的項目編號。
select project_id
from Project
group by project_id
having count(employee_id)>= ALL (
    select count(employee_id)
    from Project
    group by project_id
)
執行結果是:
{"headers": ["project_id"], "values": [[1], [5], [2]]}
  

3、若要取特定項目中【2、4、5】員工最多的項目,則結果【2、5】:分析步驟,則需要先使用where取特定項目,然后對特定項目分組,並取得每個分組中員工數,然后取這個最大員工數的項目編號。
select project_id
from Project
where project_id in(2,4,5)
group by project_id
having count(employee_id)>= ALL (
    select count(employee_id)
    from Project
    group by project_id
)
執行結果是:
  {"headers": ["project_id"], "values": [[5], [2]]}
 
4、總結如下:
A、WHERE 子句用來篩選 FROM 子句中指定的操作所產生的行。 ☆☆☆☆☆
  不可使用聚合函數。如果存在多條件,可以使用and、or等組合。
  
B、GROUP BY 子句用來分組 WHERE 子句的輸出。 ☆☆☆☆
  對where輸出的語句執行分組,按照分組條件,若是多個條件,使用","分隔。

C、HAVING 子句用來從分組的結果中篩選行(針對對象:分組數據) 。☆☆☆☆
 having可以使用聚合函數。
 
☆☆☆☆☆對於可以在分組操作之前或之后應用的任何搜索條件,在 WHERE 子句中指定它們會更有效。這樣可以減少必須分組的行數。
☆☆☆☆☆應當在 HAVING 子句中指定的搜索條件只是那些必須在執行分組操作之后應用的搜索條件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM