了解以下三个词在sql中的含义:
WHERE:对数据库中的每一行记录进行筛选
Having:对结果集(查出来的临时表)中的每一行记录进行筛选。
GROUP BY 字段名:对字段名相同的字段进行组合,形成不重名的组。
聚合函数:能够操作列向的单列字段。(理解为多组一列:如SUM()函数)
执行顺序 :where > group by > having
当使用组合之后,每个组合都自动使用了聚合函数。看总结第四点**
例如:
select * from A group by name;
name money a 10 b 20 a 20 组合后:
name money a 30 b 20
总结:
区别:
序号 | where | having |
---|---|---|
1. | 由于只能对原表进行单行筛选,所以不能使用聚合函数; | 由于临时表以组合的形式显示(多列一组),所以可以使用聚合函数。 |
2. | 对原表进行筛选。 | 对临时表进行筛选得到最终的查询结果。 |
3. | 执行单位是单行。 | 执行单位是组(多行)。(所以你要搞清楚ORDER BY的作用,因为有了ORDER BY 的作用,才有了组的概念。) |
4. | 且having只能对select语句后面的属性设置筛选条件。(除了聚合函数之外) |
第四点举例:
表名 属性名
A:a,b,c,d
例如:
select a,b,c from where a>0 group by b having a>b 对
select a,b,c from where a>0 group by b having d>a 错
相同点:当没有使用聚合函数的时候,where和having的查询结果没有区别,都是对每一行记录进行筛选 。 (但是having的执行单位还是组,只是每组只有一行记录)
- 申明:由于是本人个人见解,希望有错误之处希望各位能够帮忙纠正。