MySQL基础教程8——DQL—高级数据查询
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)