MYSQL——DQL查询语言
2019-06-24 本文已影响0人
So_ProbuING
DQL查询语句
语法
SELECT 要查询的字段列表 from 表名的列表 Where 条件列表 group by 分组字段 having 分组之后的条件限定 order排序 limit 分页限定
基础查询
- 查询单个字段
SELECT address from student;
- 查询多个字段
SELECT name,age from student;
去掉重复
SELECT DISTINCT address from student;
注意
去除重复的需要结果集完全相同才能进行去除重复。源数据不同也可以,但要确定查到的结果集相同才可。
计算列
-- 计算列的值
SELECT name,math+english FROM student;
如果有Null参与的运算结果都为Null
SELECT name,math,english,math+IFNULL(english,0) FROM student;
别名操作
as 关键字 将要查询的字段起别名
-- 起别名
SELECT name,math,english,math+IFNULL(english,0) 总分 FROM student;
条件查询
- where子句后跟条件
运算符
-
、 <、 <=、 >=、 =、 <>
-
BETWEEN...AND 在一个范围之内
-
IN(集合) 集合表示多个值,使用逗号分隔
-
LIKE '张%' 模糊查询
- 占位符
- _:单个占位符
- %:多个任意字符
- 占位符
-
IS NULL 查询某一列为Null的值,不能写=null
-
and 或 &&
-
or 或者 ||
-
not 或 !
SELECT * FROM student where age >= 20;
排序查询
语法
- order by 子句
- order by 排序字段1 排序方式1,排序字段2 排序方式2
- 排序方式
- asc 升序 默认的排序方式
- desc 降序 降序排序
# 升序排序 asc
SELECT * FROM extb1 ORDER BY money ASC;
# 降序排序 desc
SELECT * FROM extb1 ORDER BY money DESC;
- 多个排序
如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件
# 多个排序
SELECT * FROM extb1 ORDER BY age ASC , money DESC;
聚合函数
将一列数据作为一个整体,进行纵向的计算。
Mysql中的聚合函数
- count 计算个数
SELECT COUNT(NAME) FROM extb1;
- max 计算最大值
# MAX
SELECT MAX(money) from extb1;
- min 计算最小值
# MIN
SELECT MIN(age) from extb1;
- sum 计算和
# SUN
SELECT SUM(age) FROM extb1;
- avg 计算平均值
# AVG
SELECT AVG(money) FROM extb1;
注意
聚合函数的计算排除null值,null值不会参与聚合函数的计算
解决方案:
1.在计算的时候选择不包含非空的列进行计算
- 主键
- COUNT(*)
2.使用IFNULL函数
SELECT COUNT(IFNULL(name,0))FROM extb1;
分组查询
分组一般用来进行统计具有相同特征的一类数据
语法
- group by 分组字段
# 分组查询
SELECT sex,AVG(age) FROM extb1 GROUP BY extb1.sex;
# 分组查询 聚合函数组合使用
SELECT sex,AVG(age),COUNT(*) FROM extb1 GROUP BY extb1.sex;
SELECT sex,AVG(age),COUNT(*) FROM extb1 WHERE age >18 GROUP BY extb1.sex HAVING COUNT(*)>3;
# 使用别名
注意:
- 分组之后查询的字段有:1.分组字段 2 聚合函数,因为分组是统计的同一类的数据,所以在这个条件下查询的是一组数据
- 在where和having的区别
都是在分组中进行条件判断 - where在分组之前进行限定,如果不满足条件,则不参与分组 having在分组之后进行限定,如果不满足结果,则不会被查询
- where 后不可以跟聚合函数,having可以进行聚合函数的判断
分页查询
语法
LIMIT 开始的索引,要查询的数量
一般公式
开始的索引 = (当前的页面-1) * 每页显示的条数
注意
分页LIMIT是一个MYSQL"方言"