Set*_*ath 7 mysql sql where where-clause having-clause
我知道这个问题已经讨论得很多了,但是我的研究都没有让我相信MySQL中的' where'和' having'条款之间的区别.根据我的理解,我们可以使用' having' 来实现'where'子句可以完成的所有事情.例如.select * from users having username='admin'.那为什么你需要' where'条款?使用哪里可以产生任何性能差异?
该WHERE子句在聚合之前过滤来自源的数据,而HAVING子句GROUP BY在应用之后过滤数据.通常,这意味着任何非聚合过滤器都可以出现在任何一个位置,但如果您的查询中没有引用的列,则只能在WHERE子句中对其进行过滤.
例如,如果您有以下表格:
| ID | VALUE |
--------------
| 1 | 15 |
| 2 | 15 |
| 3 | 20 |
| 4 | 20 |
| 5 | 25 |
| 6 | 30 |
| 7 | 40 |
Run Code Online (Sandbox Code Playgroud)
假设您要应用以下查询:
select value, count(value)
from Table1
group by value
Run Code Online (Sandbox Code Playgroud)
但是你只想在其中包含行ID > 2.如果将其放在HAVING子句中,则会出现错误,因为该ID列在聚合后不可用,因为它不在SELECT子句中.在这种情况下,您将需要使用一个WHERE子句:
select value, count(value)
from Table1
where id > 2
group by value
Run Code Online (Sandbox Code Playgroud)
演示:http://www.sqlfiddle.com/#!2/ f6741/16
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |