DQL
date query language 数据库查询语言,关键字 select
# select 字段列表 from 表名 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数
1. 基本查询
查询多个字段
# 查询指定字段
select 字段1,字段2... from 表名
# 全部字段
select * from 表名
# 别名
select name as '名称' from test;
# as 可以省略
select name '名称' form test;
# 去重
select distinct name '名称' from test;
2. 条件查询
比较运算符
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
between ... and ... 在某个范围内 between 后是最小值,and后跟最大值,包含最大值与最小值
in(...) 在in之后的列表中,多选一
like 模糊匹配(_ 代表单个字符,%匹配任意字符)
# 查询name只有两个字符的数据
select * from test where name like '--'
# 产险name以a结尾的数据
select form test where name like '%a'
is null 是null
逻辑运算符
and 或 && 并且
or 或 || 或者
not 或 ! 不是
3.聚合函数
将一列数据 作为一个整体,进行纵向计算
null 值不参与聚合函数运算
count() 总数
max() 最大值
min() 最小值
avg() 平均值
sum() 总和
select count(id) from test;
select avg(age) from test;
4. 分组查询
语法: select 字段列表 form 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件]
-
where 与 having 区别
-
where 是分组之前进行过滤,不满足 where 条件不参与分组,having 是对分组之后结果进行过滤;
-
where 不能对聚合函数进行判断,而 having 可以
-
# 查询status =0 数据根据 category_id进行分组,统计各个分类的数据
# 5.7 版本启用严格模式,如果要同事查询分类名称,需要在group by 里面传入
SELECT category_id, category_name, COUNT(category_id) as nums FROM app_subject WHERE `status` = 0 GROUP BY category_id,category_name
# 根据categroy_id 分组并且 category_id >7 的数量, as 可省略
SELECT category_id, category_name, count(category_id) nums FROM app_subject GROUP BY category_id,category_name HAVING category_id>7
# 查询分组内数量大于7的
SELECT category_id, category_name, count(category_id) nums FROM app_subject GROUP BY category_id,category_name HAVING count(category_id)>7
5. 排序
order by 字段 1 排序方式 1,字段 2,排序方式 2。。。
asc 升序(默认)
desc 降序
排序规则,先按照字段 1 排序,如果字段 1 一样,再按照字段 2 进行排序
# 先根据category_id 降序排序,categroy_id 一样时按照id降序排;
SELECT * from app_subject ORDER BY category_id desc, id desc ;
6. 分页查询
语法: select 字段 from 表 limit 起始索引,查询记录数;
起始索引从 0 开始
SELECT * from app_subject LIMIT 0,5;
# 第二页
SELECT * from app_subject LIMIT 5,5;