乐趣区

数据库where和having的区别

竟然还不懂这个?

上课的时候老师讲 sql 语句时,感觉知道一点,就没太认真的听,而且感觉大概知道用法就没管了,但在这周的实验中,一个问题的出现,却让我发现:自己好像完全没有区分出他两。

不同所在

他两的不同还是很好区分的,网上一搜,就能找到,并且能够很好的理解:

Where 是一个 约束声明 ,使用 Where 约束来自数据库的数据,Where 是 在结果返回之前起作用 的,Where 中 不能使用聚合函数
Having 是一个 过滤声明 ,是在查询 返回结果集以后对查询结果进行的过滤操作 ,在 Having 中 可以使用聚合函数
在查询过程中聚合语句 (sum,min,max,avg,count) 要比 having 子句优先执行。而 where 子句在查询过程中执行优先级高于聚合语句。

语句 作用时间 是否能够使用聚合函数
where 结果返回之前 不能
having 结果返回之后

回到实验题目,举例说明:
现在假设有一个 order 的表,其中有的列如下

CREATE TABLE Orders(
    orderkey INT PRIMARY KEY ,
    custkey INT REFERENCES Customer(custkey),
    orderstatus CHAR(1),
    totalprice REAL ,
    orderdate DATE ,
    orderpriority CHAR(15),
    clerk CHAR(15),
    shippriority INT ,
    comment VARCHAR(79)
)

现在要查询 totalprice 大于 1000 的数据的 custkey,并按照custkey 进行分组

使用 where

select custkey from Orders where totalprice > 1000 group by custkey

使用 having

select custkey from Orders group by custkey having totalprice > 1000

参考文章

sql 语句中 where 与 having 的区别

退出移动版