SQL 語句的執行順序
如下表(table1):
id client
1 001
1 002
1 003
2 001
2 002
3 001
1 001
id 代表客服人員的 id,client 代表與該客服人員通話的客戶的 id,也是說,每有一條記錄,就代表一個客服與一位客戶進行了通話,相同的記錄,例如第一行和第七行,代表著 1 號客服與 001 號客戶在不同的時間進行了兩次通話,問:如下 SQL 可否統計出與客戶通話次數大於 1 客服 id?
SELECT id, COUNT(client) AS count
FROM table1
GROUP BY id
WHERE count > 1;
答案是不能,執行該 SQL 會報錯:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE count > 1' at line 4
原因: WHERE 子句會比 SELECT 子句先執行,上面的 SQL 中 ,當 WHERE 子句被執行時,count 這個值尚不存在。直到 WHERE 子句執行完畢,count 才會被計算出來。
SQL 語句的書寫順序如下:
SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY
SQL 語句的執行順序如下:
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
其中 SELECT 和 FROM 是必須的,其他關鍵詞是可選的,這六個關鍵詞的執行順序
與SQL語句的書寫順序並不是一樣的,而是按照下面的順序來執行
- FROM:需要從哪個資料表檢索資料
- WHERE:過濾表中資料
- GROUP BY:將上面過濾出的資料分組
- HAVING:對上面已經分組的資料進行過濾
- SELECT:檢視結果集中的哪個列,或列的計算結果
- ORDER BY:按照什麼樣的順序來檢視返回的資料
所以本文開頭所說的查詢有兩種實現的 SQL:
# 使用 HAVING 過濾分組中的資料
SELECT id, COUNT(client) AS count
FROM table1
GROUP BY id
HAVING count > 1;
# 使用內嵌檢視(子查詢),讓 WHERE 可以引用別名
SELECT * FROM
(SELECT id, COUNT(client) AS count
FROM byte_dance_table_1
GROUP BY id) tmp
WHERE tmp.count > 1;
相關文章
- SQL語句執行順序SQL
- SQL Server SQL語句執行順序SQLServer
- SQL語句各子句的執行順序SQL
- SQL語句中SELECT語句的執行順序SQL
- for語句執行順序
- SQL 查詢語句的執行順序解析SQL
- Hive SQL語句的正確執行順序HiveSQL
- mysql 語句的執行順序MySql
- mySQL 執行語句執行順序MySql
- T-sql語句查詢執行順序SQL
- SQL Select語句邏輯執行順序SQL
- mysql 中sql語句關鍵字的書寫順序與執行順序MySql
- sql語句執行順序與效能優化(1)SQL優化
- SQL Server中SELECT語句執行順序解析SQLServer
- Select語句執行順序
- 一個 MySQL sql 語句執行順序帶來的 bugMySql
- Oracle SQL語句執行流程與順序原理解析OracleSQL
- SQL語句執行順序及建議--歸納整理SQL
- Java for迴圈中語句執行的順序Java
- sql select語法執行順序SQL
- Sql執行順序SQL
- SQL語句中的AND和OR執行順序問題SQL
- JavaScript for迴圈語句的執行順序和優化JavaScript優化
- SQL 執行順序 你懂的SQL
- sql mysql 執行順序 (4)MySql
- for語句括號中程式碼執行順序介紹
- SELECT語句邏輯執行順序 你知道嗎?
- # 關於select關鍵字語句定義順序# 關於select關鍵字語句執行順序
- MySQL 查詢常用操作(0) —— 查詢語句的執行順序MySql
- 一個針對 Python 語句執行順序的練習Python
- ORACLE中sql語句----運算子的優先順序OracleSQL
- PLSQL Language Referenc-PL/SQL控制語句-順序控制語句-NULLSQLNull
- 可看執行順序的xplan.package.sqlPackageSQL
- sql語句如何執行的SQL
- 執行大的sql語句SQL
- sql中的or與and的執行順序問題SQL
- sql語句批量執行SQL
- java中異常處理finally和return語句的執行順序Java