4

竟然还不懂这个?

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

不同所在

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

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的区别


笙歌会停
1k 声望45 粉丝

代码成就万世基积沙镇海 梦想永在凌云意意气风发