SELECT
范围查询 BETWEEN AND
BETWEEN AND
关键字,用来判断字段的数值是否在指定范围内。
- 语法:
-
[NOT] BETWEEN value1 AND value2
- NOT:可选参数,表示指定范围之外的值。如果字段值不满足指定范围内的值,则这些记录被返回。
- value1:表示范围的起始值。
- value2:表示范围的终止值。
-
mysql> SELECT name,price FROM car_list
-> WHERE price BETWEEN 20 AND 23;
mysql> SELECT name,price FROM car_list
-> WHERE price NOT BETWEEN 20 AND 23;
mysql> SELECT name,produce_date FROM car_list
-> WHERE produce_date BETWEEN '2021-10-01' AND '2021-12-31';
空值查询 NULL
IS NULL
关键字 可以判断所选的字段值是否为空值[NULL] 空值不是0 ,也不是空字符串
- 语法:
IS [NOT] NULL
mysql> SELECT name,price FROM car_list
-> WHERE name IS NULL;
#选出 name 字段值为NULL的记录
mysql> SELECT name,price FROM car_list
-> WHERE name IS NOT NULL;
#选出 name 字段值 不为NULL的记录
IS NULL
关键字 作为一个整体出现 IS
不能 替换成'='/'==='
等字符 将不会有任何结果返回 出现 Emptyset
类似提示。
分组查询 GROUP BY
GROUP BY
关键字 可以根据一个或多个字段对查询结果进行分组。
- 语法:
- GROUP BY <字段名>
- 字段名 如果有多个时 逗号隔开 字段1,字段2
- GROUP BY <字段名>
2.使用:
单独使用
查询结果只显示 分组的第一条记录
上代码
mysql> SSELECT name,price FROM car_list
-> GROUP BY price;
+-----------+-------+
| name | price |
+-----------+-------+
| magontan | 30 |
| sigartar | 20 |
+-----------+-------+
GROUP BY 与 GROUP_CONCAT()
GROUP BY 关键字可以和 GROUP_CONCAT() 函数一起使用。
GROUP_CONCAT() 函数会把每个分组的字段值都显示出来。
mysql> SELECT `sex`, GROUP_CONCAT(name) FROM tb_students_info
-> GROUP BY sex;
+------+----------------------------+
| sex | GROUP_CONCAT(name) |
+------+----------------------------+
| 女 | Henry,Jim,John,Thomas,Tom |
| 男 | Dany,Green,Jane,Lily,Susan |
+------+----------------------------+
多个字段分组查询时,会先按照第一个字段进行分组。如果第一个字段中有相同的值,MySQL 才会按照第二个字段进行分组。如果第一个字段中的数据都是唯一的,那么 MySQL 将不再对第二个字段进行分组。
GROUP BY 与聚合函数
简要记录一下聚合函数有那些:
- COUNT() 统计记录条数
- SUM() 用来计算字段值总和
- AVG() 用来计算字段值平均值
- MAX() 用来查询字段最大值
- MIN() 用来查询字段最小值
更多聚合函数参考 http://c.biancheng.net/mysql/function/
mysql> SELECT sex,COUNT(sex) FROM tb_students_info
-> GROUP BY sex;
+------+------------+
| sex | COUNT(sex) |
+------+------------+
| 女 | 5 |
| 男 | 5 |
+------+------------+
GROUP BY 与 WITH ROLLUP
WITH POLLUP 关键字用来在所有记录的最后加上一条记录,这条记录是上面所有记录的总和,即统计记录数量。
mysql> SELECT sex,GROUP_CONCAT(name) FROM tb_students_info
->GROUP BY sex WITH ROLLUP;
+------+------------------------------------------------------+
| sex | GROUP_CONCAT(name) |
+------+------------------------------------------------------+
| 女 | Henry,Jim,John,Thomas,Tom |
| 男 | Dany,Green,Jane,Lily,Susan |
| NULL | Henry,Jim,John,Thomas,Tom,Dany,Green,Jane,Lily,Susan |
+------+------------------------------------------------------+
GROUP_CONCAT(name) 显示了每个分组的 name 字段值。同时,最后一条记录的 GROUP_CONCAT(name) 字段的值刚好是上面分组 name 字段值的总和。