sql 查詢關鍵詞的執行順序


1 問題

SQL是一門需要進行編譯的語言,因此在實際執行過程中是需要數據庫編譯模塊進行編譯的。特別是在查詢的時候,對於別名的使用,不管是表還是列,錯誤的使用會導致查詢的失敗。

 

2 詳解

查詢語句遵循以下的查詢順序,從執行的順序來看,基本就可以看到select子句中列的別名是無法在group by和having等子句中出現的。

優先級 關鍵詞 備注
1 FROM from子句返回初始結果集
2 ON 排除不滿足join的條件的行
3 JOIN 多表關聯
4 WHERE 子句排除不滿足搜索條件的行
5 GROUP BY 子句將選定的行收集到group by子句中各個唯一值的組中
6 HAVING 子句排除不滿足搜索條件的行
7 SELECT 列名,此時可以為列名起別名,列名之間用逗號隔開
8 DISTINCT 可以在select子句中,找出唯一值
9 ORDER BY 對結果集進行排序
10 LIMIT 限定查詢的行數,一般放在查詢語句的最后面

 

簡單記為:from->where->group by->having->select->order by

3 總結

在mysql中,group by中可以使用列別名;where中不能使用列別名;order by中可以使用列別名。其余像oracle,hive中別名的使用都是嚴格遵循sql執行順序的,groupby后面不能用別名。mysql特殊是因為mysql中對查詢做了加強。


免責聲明!

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



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