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語句各子句的執行順序SQL
- SQL 查詢語句的執行順序解析SQL
- Hive SQL語句的正確執行順序HiveSQL
- mysql 語句的執行順序MySql
- mySQL 執行語句執行順序MySql
- Select語句執行順序
- sql語句執行順序與效能優化(1)SQL優化
- mysql 中sql語句關鍵字的書寫順序與執行順序MySql
- 一個 MySQL sql 語句執行順序帶來的 bugMySql
- sql select語法執行順序SQL
- Java for迴圈中語句執行的順序Java
- Sql執行順序SQL
- SQL語句中的AND和OR執行順序問題SQL
- # 關於select關鍵字語句定義順序# 關於select關鍵字語句執行順序
- sql mysql 執行順序 (4)MySql
- ORACLE中sql語句----運算子的優先順序OracleSQL
- MySQL 查詢常用操作(0) —— 查詢語句的執行順序MySql
- sql語句如何執行的SQL
- mysql的sql語句執行流程MySql
- Laravel 獲取執行的sql語句LaravelSQL
- 你瞭解一條sql的執行順序嗎SQL
- pipeline的執行順序
- sql語句執行緩慢分析SQL
- 後臺執行SQL語句(oracle)SQLOracle
- mysql執行sql語句過程MySql
- Mybatis 動態執行SQL語句MyBatisSQL
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- SQL中rownum和order by的執行順序的問題SQL
- SQL Server 查詢歷史執行的SQL語句SQLServer
- mysql自定義排序順序語句MySql排序
- Laravel 框架查詢執行的 SQL 語句Laravel框架SQL
- 一條sql語句的執行過程SQL
- MySQL cron定時執行SQL語句MySql
- java連線oracle執行sql語句JavaOracleSQL
- Spring Aop的執行順序Spring
- python if語句有先後順序嗎Python
- 一條update SQL語句是如何執行的SQL