SQL的执行顺序以及ON、WHERE、HAVING的区别

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:分页

2.1 笛卡尔积产生的条件

1、省略了on的连接条件
2、所有表的所有行数据都相连
3、连接条件无效

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在外部连接后,根据约束条件筛选数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SYBY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值