Mysql技术分享
Summary: Author: 张亚飞 | Read Time: 1 minute read | Published: 2022-11-11
Filed under
—
Categories:
Linux
—
Tags:
Note,
Mysql技术分享
[](https://relph1119.github.io/mysql-learning-notes/#/mysql)
索引下推
HAVING 分组筛选
如果想要从 GROUP BY
分组中进行筛选的话,不是用 WHERE
而是使用 HAVING
来进行聚合函数的筛选。WHERE
只能过滤行,如果是要对 GROUP BY
的结果进行筛选,需要使用 HAVING
条件,HAVING
子句必须写在 GROUP BY
子句之后
使用 HAVING
子句时 SELECT
语句的顺序
SELECT -> FROM -> WHERE -> GROUP BY -> HAVING
查询商品分类条数汇总并将条数为2的商品提取出来
SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type
HAVING COUNT(*) = 2;
查询结果
product_type | count
-------------+------
衣服 | 2
办公用品 | 2
注意: 如果
HAVING
查询没有带GROUP BY
子句,MySQL 会自动加上GROUP BY NULL
条件以符号规范,这样可能会导致非预期错误。
例如:
SELECT * FROM t HAVING id=MIN(id);
SELECT * FROM t HAVING id=MAX(id);
会被转化成:
SELECT * FROM t GROUP BY NULL HAVING id=MIN(id);
SELECT * FROM t GROUP BY NULL HAVING id=MAX(id); // 查询结果为空
NULL 值
NULL和空值
NULL也就是在字段中存储NULL值,空值也就是字段中存储空字符(“)。 1、占用空间区别
mysql> select length(NULL), length(''), length('1');
+--------------+------------+-------------+
| length(NULL) | length('') | length('1') |
+--------------+------------+-------------+
| NULL | 0 | 1 |
+--------------+------------+-------------+
1 row in set
复制代码小总结:从上面看出空值(”)的长度是0,是不占用空间的;而的NULL长度是NULL,其实它是占用空间的。
判断是否为 NULL 应该用 IS NULL 或 IS NOT NULL
使用 =
或 !=
查询 NULL
永远返回 NULL
使用 count 列会过滤值为 NULL 的记录
SELECT count(end_id) FROM meet_bill;
SELECT count(end_at) FROM meet_bill;
Comments