SQL語句的執行順序:
下面按照在SQL語句中各關鍵詞的順序排放。
- 前面的第幾步是數據庫執行SQL語句時的執行順序
- 我的排列順序是書寫SQL語句時各關鍵詞的排放順序,不要搞混。
-
–第五步:執行SELECT投影列
-
–第一步:執行FROM
-
–第二步:WHERE條件過濾
-
–第三步:GROUP BY分組
-
–第四步:HAVING條件過
-
–第六步:執行ORDER BY 排序 注:如果又使用到了MySQL中的limit關鍵字,則limit要放在order by之後。
ORDER BY子句(檢索數據的排序):
-
可以按多個列進行排序,只有當第一個列的值相同時纔會按第二個列排序。
-
DESC表示降序排序,ASC表示升序排序(數據默認按升序排序,所以一般用不到)
-
ORDER BY子句永遠是SQL最後一句子句
WHERE子句條件操作符(部分冗餘操作符未列出):
-
=:等於
-
>:大於
-
<:小於
-
!=:不等於
-
>=:大於等於
-
<=:小於等於
-
BETWEEN:範圍檢查,例:SELECT name,age,sex FROM `user` WHERE age BETWEEN 10 AND 20。
-
IS NULL :爲NULL值(即未賦值),例:SELECT name,age,sex FROM `user` WHERE age IS NULL。
GROUP BY子句(對數據進行分組):
-
可以包含多個列
-
必須出現在WHERE子句之後,ORDER BY子句之前。
-
子句中不能使用聚集函數
HAVING子句(過濾分組):
-
一般與GROUP BY子句一塊使用,對GROUP BY子句產生的分組做篩選。
-
支持所有WHERE操作符,句法相同
-
WHERE在分組前進行過濾,HAVING在分組進行過濾。
組合查詢:
-
利用UNION操作符將多條SELECT語句的結果組成單個結果集。
-
UNION的使用很簡單,只需在多條SELECT語句之間加上UNION關鍵字即可。例:SELECT * FROM `user` WHERE age=15 UNION SELECT * FROM `user` WHERE age=20
-
UNION連接的每個查詢必須包含相同的列、表達式或聚集函數。
-
UNION查詢時自動去除了重複的行,要返回所有行可以使用UNION ALL;
-
使用UNION時,只能使用一條ORDER BY子句,且必須出現在最後一條SELECT語句之後。