数据库语句where、on、having的区别

where on having 的区别

where on having都是查询条件,可以筛选出符合条件的数据,三者的主要区别是限制条件起作用的时机不同。

执行顺序: ON------>WHERE------>HAVING

where和having

①where的筛选单位是数据行,符合条件的数据行才会被筛选出来,where子句在GROUP BY分组和聚合函数之前对数据行进行过滤;所以where中不可以使用聚合函数。where起作用的时机在having之前。

②having不能单独使用,只能出现在GROUP BY子句之后,having子句对GROUP BY分组和聚合函数之后的数据行进行过滤。所以having中可以使用聚合函数来筛选分组。

③having中可以出现的条件:聚合函数以及分组后能得到的数据的列名(即只能使用分组字段或者聚合函数。)

从性能的角度来说,HAVING子句中如果使用了分组字段作为过滤条件,应该替换成WHERE子句;因为WHERE可以在执行分组操作和计算聚合函数之前过滤掉不需要的数据,性能会更好。having的条件通常为聚合函数。

总结就是:where用于分组和聚合函数之前对数据进行过滤,having用于聚集函数计算结果出来之后筛选结果,符合条件的分组才会被返回。

on 和where

①on是用来限制表和表之间连接的条件。

②在左外连接中,ON会返回左表中的所有记录;在右外连接中,ON会返回右表中的所有记录。如果是内连接,where和on的作用一样

③不符合on条件的数据行不会出现在临时表中(过滤数据),where根据on条件后得到的结果筛选出符合where条件的数据行。

总的来说,ON根据限制条件对数据行记录进行过滤,然后产生临时表;而WHERE是在临时表生产之后,根据限制条件从临时表中筛选结果。

因为ON限制条件发生时间较早,临时表的数据集要小,因此ON的性能要优于WHERE。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值