1. 程式人生 > >Mysql中having篩選

Mysql中having篩選

Mysql中where和having(篩選)的區別:

下面是mysql中的select查詢語句:
mysql> select sname,(age-sno) as a from student;
+--------+------+
| sname  | a    |
+--------+------+
| 換換   |   22 |
| 劉麗   |   20 |
| NULL   |    6 |
| 張友   |   17 |
+--------+------+
4 rows in set (0.00 sec)

mysql> select sname,(age-sno) as a from student where a > 10;
ERROR 1054 (42S22): Unknown column 'a' in 'where clause'

注意:程式設計中任何的查詢結果都可以作為變數使用,mysql中也通用.
當使用where條件匹配是報錯,區別:
where查詢針對的是磁碟,“select sname,(age-sno) as a from student where a > 10;”
where之前的select查詢結果也就是“a”的值會臨時存放在記憶體中,後續的where條件匹配時磁碟資料庫中沒有“a”列,匹配不到就會報錯.

使用having查詢過濾匹配:
mysql> select sname,(age-sno) as a from student having a > 10;
+--------+------+
| sname  | a    |
+--------+------+
| 換換   |   22 |
| 劉麗   |   20 |
| 張友   |   17 |
+--------+------+
3 rows in set (0.00 sec)

注意:having的條件匹配是針對記憶體中的結果集.