DQL 数据查询 Data Query Language

结构

1
2
3
4
5
6
7
8
9
10
11
12
select DISTINCT c1 AS alias_name, c2, ...
from table_name

where condition

group by c1 , c2,...
having group_condition

order by c1 DESC, c2 ASC, ...

limit [offset,] row_count
;

执行顺序

  • FROM
  • WHERE
  • GROUP BY
    • HAVING
  • DISTINCT
  • SELECT
  • ORDER BY
  • LIMIT

GROUP BY

group by 一般用于分组统计,

SELECT 后的表达式 和 HAVING 后的表达式 只能使用 GOURP BY 后的字段

1
2
3
4
-- 统计每个 gender 的数量
SELECT gender,COUNT(*)
FROM emp
GROUP BY gender;

多个字段,分组之后再分组。例如:每个班级每个性别的学生人数。

1
2
3
4
-- 每个班级每个性别的学生人数。
SELECT class, gender, COUNT(*)
FROM student
GROUP BY class, gender;

HAVING

仅用于配合 GROUP BY 使用。

DISTINCT (adj.明显不同的)

删除重复

LIMIT

1
2
3
4
5
SELECT 
select_list
FROM
table_name
LIMIT [offset,] row_count;

offset 偏移量,跳过前N条数据, 忽略时等同于0

row_count 返回结果数量

oracle数据库不支持mysql中limit功能,其使用rownum

语法

查询:

1
2
3
4
5
-- 多个字段
select 字段1 [as 别名1],字段2 [as 别名2] from 表名;

-- 所有字段
select * from 表名;

别名有空格:'姓 名'

去除重复记录:

1
select distinct 字段列表 from 表名;

分组查询

聚合函数

只能在字段列表处使用

常见聚合函数

count(字段) count(*) count(常量)

min()

max()

avg() 平均值,有小数

sum()

null 值不参与所有聚合函数计算

聚合函数不能写在 where 后(只可以写在字段后和having后)

排序查询

1
select ... from ... order by 字段1 排序方式1,字段2 排序方式2,...;

字段1相同时,根据字段2排序

排序方式:
ASC 升序(默认值)
DESC 降序

分页查询

1
select ... from ... limit 起始索引,展示数据条数

分页查询不同的数据库有不同的实现,MySQL用limit,Oracle不用这个

如果查询的是首页数据,可省略起始索引,写作 limit 展示数据条数