SQL语句的书写顺序与执行顺序不是一致的
1、SQL语句的书写顺序
- 语句的书写顺序是比较重要的,如果顺序不对去执行也是会报错的。
- 之前的SELECT、WHERE、ORDER BY、LIMIT、JOIN、UNION、GROUP BY、HAVING等语法,如果这些语句在SQL中同时存在,那书写顺序就非常重要了。
基本语法:
SELECT <字段名>
FROM <表名a>
JOIN <表名b>
ON <a.字段名 = b.字段名>
WHERE <筛选条件>
GROUP BY <字段名>
HAVING <筛选条件>
UNION
ORDER BY <字段名>
LIMIT <限制行数>;
看着会比较复杂,不需要特意去背,多做题自然而然就熟悉了。
2、SQL语句的执行顺序
SQL语句的书写顺序实际上与执行的顺序是不一样的,具体来看:
- FROM :选择from后面跟着的表,产生虚拟表1
- ON:on是join的连接条件,符合连接条件的会被记录在虚拟表2
- JOIN:如果指定了left join的话,会保留表中未匹配的行会作为外部行添加带虚拟表2,产生虚拟表3, 如果有多个join,会重复执行1~3步骤,直到处理完所有
- WHERE:对虚拟表3进行条件筛选过滤,符合条件的记录会被记录到虚拟表4
- GROUP BY:根据grouo by 子句中的列,对虚拟表4中的记录进行分组,产生虚拟表5
- HAVING :对虚拟表5进行条件过滤,符合条件的记录会被插入到虚拟表6中
- SELECT :select 到这一步才执行,选择指定的列,插入到虚拟表7中
- UNION:union连接两个select查询语句,会重复执行1-7步骤,产生两个虚拟表7,union会将这些记录合并到虚拟表8
- ORDER BY:将虚拟表8中的数据,进行排序,产生虚拟表9
- LIMIT :从虚拟表9中 取出指定行的记录,返回到结果集
3、总结的顺序
-
书写顺序:SELECT > FROM > JOIN > ON > WHERE > GROUP BY > HAVING > UNION > ORDER BY > LIMIT >;
-
执行顺序:FROM > ON > JOIN > WHERE > GROUP BY > HAVING > SELECT > UNION > ORDER BY > LIMIT >;
需要注意的地方:
无论是执行顺序还是书写顺序,UNION都是在 ORDER BY 前面,SQL语句会把所有UNION合并后,在进行排序。