1、SQL99语句完整结构:
SELECT...,...,...(存在聚合函数)
FROM...(LEFT / RIGHT)JOIN ...ON 多表的连接条件
(LEFT / RIGHT)JOIN ...ON
WHERE ...(WHERE子句不能使用聚合函数)
GROUP BY ...,...
HAVING (HAVING子句可以包含聚合函数的过滤条件也可以不包含)
ORDER BY ...,...(ASC / DESC)
LIMIT ...,...;
2、SQL语句的执行顺序
FROM …,…-> ON -> (LEFT/RIGHT JOIN) -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT->ORDER BY. -> LIMIT
(1)from:从哪些表中筛选 (2)on:关联多表查询时,去除笛卡尔积 (3)where:从表中筛选的条件 (4)group by:分组依据 (5)having:在统计结果中再次筛选 (6)select: 展示哪些字段列表 (7)order by:排序 (8)limit:分页
3、WHERE和HAVING的区别
HAVING 1、HAVING子句可以包含聚合函数的过滤条件也可以不包含,通常与GROUP BY连用。 2、HAVING先进行计算,然后再过滤。
WHERE 1、WHERE子句不能使用聚合函数,可以与GROUP BY连用也可以不连用 2、WHERE是先进行约束,然后再进行计算。
3.1、优化HAVING的处理速度
当HAVING的逻辑中有可以使用WHERE筛选,优先使用WHERE筛选,这样可以减少HAVING的过滤查询。
4、ON和WHERE的区别
首先,内连接情况下,ON与WHERE子句是等效的。 外连接情况下有以下区别: 1、ON限制条件的发生时间比WHERE早。 2、ON在进行外部连接前,根据约束条件筛选数据。 3、WHERE在外部连接后,根据约束条件筛选数据。
|