数据库语句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。

猜你喜欢

转载自blog.csdn.net/m0_48895748/article/details/126708856