Where和having

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hao1066821456/article/details/82829954

where基于from的数据做的筛选;

(个人理解)having基于select的数据做的筛选

按照以上的理解,可以做以下测试:

表名student,列名及数据:

+------+--------+------+------+
| SId  | Sname  | Sage | Ssex |
+------+--------+------+------+
| 1    | 张三   | 18   | 男   |
| 2    | 李四   | 20   | 男   |
| 3    | 王武   | 22   | 男   |
| 4    | 小白   | 20   | 女   |
+------+--------+------+------+

mysql> select * from student a where a.Sage > 20;
+------+--------+------+------+
| SId  | Sname  | Sage | Ssex |
+------+--------+------+------+
| 3    | 王武   | 22   | 男   |
+------+--------+------+------+
1 row in set (0.00 sec)

mysql> select * from student a having a.Sage > 20;
+------+--------+------+------+
| SId  | Sname  | Sage | Ssex |
+------+--------+------+------+
| 3    | 王武   | 22   | 男   |
+------+--------+------+------+

mysql> select a.Sname from student a having a.Sage > 20;
ERROR 1054 (42S22): Unknown column 'a.Sage' in 'having clause'

错误原因:select中没有Sage字段

mysql> select max(a.Sage) as ma from student a where ma > 20;
ERROR 1054 (42S22): Unknown column 'ma' in 'where clause'

错误原因:where 后不能使用select中的别名或聚合行数

mysql> select max(a.Sage) as ma from student a having ma > 20;
+------+
| ma   |
+------+
| 22   |
+------+
1 row in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/hao1066821456/article/details/82829954