MySQL基础教程8——DQL—高级数据查询

142 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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)

(点击进入专栏查看详细教程)