SQL数据库学习

说说WHERE,HAVING和ON的区别?

2020-08-05  本文已影响0人  践行数据分析

这三个关键字我们平时经常使用,他们一个共同点是:都可以用来过滤数据。

那不同点是什么呢?我们先来看看WHERE和HAVING的区别

WHERE和HAVING

在搞清楚WHERE和HAVING的区别之前,我们需要知道老生常谈的SQL执行顺序:

上面的序号代表SQL在运行时,数据库底层的先后顺序,我们可以看到:

WHERE是在GROUP BY之前执行的,所以WHERE的后面是不能使用聚合函数来进行数据过滤的,只能使用FROM表里的字段来进行数据过滤;

HAVING是在GROUP BY之后执行的,那么这些数据就都已经分过组了的,可以使用聚合函数来进行数据的分组过滤。

上面就是WHERE和HAVING的主要区别了,此外WHERE和HAVING在性能上也有所区别,但这通常不是主要的,我们就不深入讲解了。

说完WHERE和HAVING,我们再来看看WHERE和ON的区别

WHERE和ON

功能区别

我们知道ON支持左连接和右连接,WHERE是不支持的,WHERE里面只支持内连接,这在功能上是一个较大的区别。当然Oracle的 WHERE可以通过(+)来实现左右连接,这个我们就不讨论了。

性能区别

我们知道所有的查询都回产生一个中间临时报表,查询结果就是从返回临时报表中得到。ON和WHERE后面所跟限制条件的区别,主要与限制条件起作用的时机有关,ON根据限制条件对数据库记录进行过滤,然后生产临时表;而WHERE是在临时表生产之后,根据限制条件从临时表中筛选结果。

因为ON限制条件发生时间较早,临时表的数据集要小,因此ON的性能要优于WHERE。但这通常是在数据量比较大的时候才比较明显,如果数据量都比较小,这两个在使用上没有太大区别。

上一篇下一篇

猜你喜欢

热点阅读