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语句之后。