DQL(数据库查询语言)
查询语句
基础查询
- 多字段查询
select 字段名1, 字段名2... from 表名;
(查询所有用*代替所有字段) - 去除重复
select distinct 字段名 from 表名;
(如果两个字段名要都相同才能去重)
- 计算列
select 字段名1+字段名2 from 表名;
(可以使用四则运算来简单计算数据)
select '123'+90;
则为 213
select 'a'+90;
则为90, 转换失败,则字符型数值转换为0
若数据中有null, null参与运算,计算结果为null, 则将有null的字段用IFNULL(字段名, 0)
eg : select NAME, math, english, math + IFNULL(english, 0) from stu;
[ifnull函数]
: 判断某字段或表达式是否为null, 如果为null, 返回指定的值, 否则返回原本的值
[isnull函数]
: 判断某字段或表达式是否为null, 如果是, 则返回1, 否则返回0
- 起别名 :
select 字段名 AS 别名 from 表名;
(可以用AS, 也可以用一个或多个空格) - 查询数据是否存在:
select exists(select * from 表名 where 条件)
- 字符串拼接:
select concat(字段名1, 字段名2) from 表名;
字符型和日期型常量值必须用单引号引起来, 数值型不需要
条件查询
- where子句后跟条件
- 运算符
> < <= >= = <>(!=)
and(&&) or(||)
not/!
BETWEEN…AND… (包含边界值) select * from stu where age BETWEEN 20 AND 30;
(查询年龄在20到30岁的学生的所有信息)
NOT BETWEEN … AND … : 不在…和…之间的值
- IN(集合)
select * from stu where age IN (19, 20, 23);
(查询年龄为19,20或23岁的学生的所有信息)
IS NULL select * from stu where english IS NOT NULL;
(查询英语成绩不为null的学生的所有信息)
LIKE : 模糊查询
占位符 :
_ : 单个任意字符
% : 多个任意字符
eg : select * from stu where name LIKE '%晓%';
(查询名字中包含晓的学生的所有信息)
排序查询
- order by 排序字段1 排序方式, 排序字段2 排序方式2…
select * from stu ORDER BY math;
(默认升序排列) - 排序方式 ASC : 升序(默认) DESC : 降序
select * from stu ORDER BY math ASC;
select * from stu ORDER BY math DESC;
字符函数
日期函数
MySQL 日期与时间方面的函数 - 极客学院MySQL日期和时间函数 - 易百教程
聚合函数
将一列数据作为一个整体, 进行纵向的计算.
Tips : 聚合函数的计算, 排除null的值.
解决方案 : 1. 选择不包含非空的列进行计算 2. IFNULL函数(eg: IFNULL(math, 0)
: 意思是如果math中有null, 则为0)
- count : 计算个数
- max : 计算最大值
- min : 计算最小值
- sum : 计算和
- avg : 计算平均值
eg :select AVG(IFNULL(math, 0) from stu;
: 查询stu表中math的平均成绩,如果列中有null, 则为0
分组查询
GROUP BY 分组字段;
注意事项 :
- 使用分组后, 查询的字段 : 分组字段, 聚合函数(其他字段的话没有意义)
- where 和 having 的区别
- where 在分组之前进行限定, 如果不满足条件, 则不参与分组. having 在分组之后进行限定, 如果不满足结果, 则不会被查询出来.
- where 后不可以跟聚合函数, having 可以进行聚合函数的判断
select sex , AVG(math), COUNT(id) peo_sum from stu where math > 70 GROUP BY sex HAVING peo_sum > 2;
: 按照性别分组, 查询stu表, 分数大于70分, 分为男 女两组, 分别显示数学平均成绩和男女所占人数
分析上面的查询语句 : 首先, 分组之前 先进行where进行筛选, 查询数学分数大于70, 之后开始GROUP BY对性别进行分组. 分组完成后, 上面将COUNT(id)计算人数的聚合函数起了别名peo_num, 然后根据分组后的数据继续通过HAVING进行筛选, 查询人数大于2. 完成了查询分组在查询的操作后, 开始显示数据.(其中显示的数据, 可以是 分组的字段, 对元数据进行聚合函数的显示, 否则其他列字段没有意义)
分页查询
- 语法 :
LIMIT 开始的索引, 每页显示的条数;
- 公式 : 开始的索引 : (当前的页码 - 1) * 每页显示的条数
eg :
sql语句根据条件查询指定数量的数据
查询涉及到的所有的关键字
联合查询
语法:
查询语句1
union
查询语句2
union
…
应用场景:
要查询的结果来自于多个表, 且多个表没有直接的连接关系, 但查询的信息一致时
特点:
- 要求多条查询语句的查询列数是一致的
- 要求多条查询语句的查询的每一列的类型和顺序最好一致
- union关键字默认去重, 如果使用union all 可以包含重复项