持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情
MySQL基础教程8——DQL—高级数据查询
聚合函数
select 聚合函数(字段列表) from 表名;
count(统计数量)函数
mysql> select count(*) from user;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)
可以查询到一共有1条数据,注意如果count(字段列表)中字段有空值是不会被记录到该条数据。
例如:
+------+------+
| id | name |
+------+------+
| 1 | Tom |
| 2 | NULL |
+------+------+
mysql> select count(name) from user;
+-------------+
| count(name) |
+-------------+
| 1 |
可以看到有两条数据但是我们查询的是name字段,该字段中有一个空值,因此查询的结果只有一条。
max(最大值)函数
+------+------+
| id | name |
+------+------+
| 1 | Tom |
| 2 | NULL |
+------+------+
mysql> select max(id) from user;
+---------+
| max(id) |
+---------+
| 2 |
+---------+
1 row in set (0.02 sec)
查询字段id中的最大值为2。
min(最小值)函数
+------+------+
| id | name |
+------+------+
| 1 | Tom |
| 2 | NULL |
+------+------+
mysql> select min(id) from user;
+---------+
| min(id) |
+---------+
| 1 |
+---------+
1 row in set (0.00 sec)
查询字段id中的最小值为1。
sum(求和)函数
+------+------+
| id | name |
+------+------+
| 1 | Tom |
| 2 | NULL |
+------+------+
mysql> select sum(id) from user;
+---------+
| sum(id) |
+---------+
| 3 |
+---------+
1 row in set (0.00 sec)
计算所有id字段存储值的和。
avg(平均值)函数
+------+------+
| id | name |
+------+------+
| 1 | Tom |
| 2 | NULL |
| NULL | bom |
+------+------+
mysql> select avg(id) from user;
+---------+
| avg(id) |
+---------+
| 1.5000 |
+---------+
1 row in set (0.00 sec)
注意: 字段中的空值不被记录总数因此也不参与平均值的计算。
分组查询
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤];
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段没有意义。
+------+------+--------+
| id | name | gender |
+------+------+--------+
| 1 | bom | 男 |
| 2 | tom | 男 |
| 3 | ming | 女 |
+------+------+--------+
mysql> select gender,count(*) from user group by gender;
+--------+----------+
| gender | count(*) |
+--------+----------+
| 女 | 1 |
| 男 | 2 |
+--------+----------+
排序查询
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
排序方式:asc(升序,默认值),desc(降序)
mysql> select * from user order by id asc;
+------+------+--------+
| id | name | gender |
+------+------+--------+
| 1 | bom | 男 |
| 2 | tom | 男 |
| 3 | ming | 女 |
+------+------+--------+
3 rows in set (0.00 sec)
mysql> select * from user order by id desc;
+------+------+--------+
| id | name | gender |
+------+------+--------+
| 3 | ming | 女 |
| 2 | tom | 男 |
| 1 | bom | 男 |
+------+------+--------+
3 rows in set (0.00 sec)
分页查询
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意: 起始索引值从0开始。
mysql> select * from user limit 0,2;
+------+------+--------+
| id | name | gender |
+------+------+--------+
| 1 | bom | 男 |
| 2 | tom | 男 |
+------+------+--------+
2 rows in set (0.00 sec)
mysql> select * from user limit 1,2;
+------+------+--------+
| id | name | gender |
+------+------+--------+
| 2 | tom | 男 |
| 3 | ming | 女 |
+------+------+--------+
2 rows in set (0.00 sec)