竟然还不懂这个?
上课的时候老师讲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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。