共计 795 个字符,预计需要花费 2 分钟才能阅读完成。
竟然还不懂这个?
上课的时候老师讲 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 的区别
正文完