SQL语句(三)
DQL:查询表中的记录
1.语法
select 字段列表
from 表名列表
where 条件列表
group by 分组字段
having 分组之后的条件
order by 排序
limit 分页限定
现有一张Student表:
id | name | age | gender | address | math | english | insert_time |
---|---|---|---|---|---|---|---|
1 | 张三三 | 18 | 男 | 上海 | 80 | 60 | 2020-10-15 14:27:55 |
2 | 李四 | 20 | 女 | 北京 | 82 | 64 | 2020-10-15 14:27:55 |
3 | 王五五 | 30 | 男 | 深圳 | 90 | 75 | 2020-10-15 14:27:55 |
4 | 赵六 | 25 | 男 | 上海 | 65 | 69 | 2020-10-15 14:27:55 |
5 | 田七 | 23 | 男 | 福州 | 84 | 93 | 2020-10-15 14:27:55 |
2.基础查询
select * from student; -- 查询表中所有内容
select name,address from student; -- 查询指定列
/*使用distinct去除重复的数据*/
select distinct address from student;
/*计算不同列的和,并给结果另起名字*/
--ifnull(exp1,exp2):如果exp1参数为null,那么就用exp2数值代替
SELECT NAME,math AS 数学,english AS 英语,IFNULL(math,0)+IFNULL(english,0) as 总分 FROM student;
--可以省略as
SELECT NAME,math 数学,english 英语,IFNULL(math,0)+IFNULL(english,0) 总分 FROM student;
3.条件查询
- 1.where子句后跟条件
- 2.运算符
比较运算符 | 说明 |
---|---|
< 、>、<=、>=、=、<> | <>表示“不等”,也可用!=,没有== |
between…and | 比如between 10 and 100, 表示[10,100] |
in(集合) | 集合表示多个值,用逗号分隔 |
LIKE ‘张%’ | 模糊查询 |
is null | 查询某一列为null的值,不能使用=null |
SELECT name 姓名,math 数学 from student WHERE math>75; -- 查询数学大于75的学生姓名及数学分数
SELECT name 姓名,math 数学 from student WHERE math BETWEEN 65 and 82;
SELECT name 姓名,address 地址 from student WHERE address IN("上海","北京");
/*查询某一列是否为空值,不能使用= null*/
SELECT name 姓名,english 英语 from student WHERE english is null;
SELECT name 姓名,english 英语 from student WHERE english is not null;
/*模糊查询like*/
SELECT name 姓名 FROM student WHERE name LIKE "赵%"; -- %表示多个占位符
SELECT name 姓名 FROM student WHERE name LIKE "%赵%"; -- 查询姓名中有赵的人
SELECT name 姓名 FROM student WHERE name LIKE "赵_"; -- _表示一个占位符
逻辑运算符 | 说明 |
---|---|
and | 与 |
or | 或 |
not | 非 |
SELECT name 姓名,address 地址 from student WHERE address="北京" or address="上海";
4.排序查询
语法: order by 子句
- order by 排序字段1 排序方式1, 排序字段2 排序方式2,…, 排序字段n 排序方式n;
SELECT * from student ORDER BY math; -- 默认升序排列
SELECT * from student ORDER BY math DESC; -- 降序排列
SELECT * from student ORDER BY math DESC, english DESC; -- 先按math降序排列,若math相等则按english排序
5.聚合函数
聚合函数:将一列作为一个整体进行纵向的计算
- 1.count:计算个数
- 2.max:计算最大值
- 3.min: 计算最小值
- 4.sum: 求和
- 5.avg: 计算平均值
1.count:计算 个数
注意:一般选取非空的列:主键
SELECT count(NAME) from student; -- count函数会自动排除NULL
2.max/min:计算最大/最小值
SELECT MAX(math) 数学最高分 from student;
SELECT MIN(english) from student;
3.sum:求和
select sum(math) from student;
4.avg:求平均
select avg(english) from student;
6.分组查询
语法: group by 子句
-- 根据gender进行分组,分别计算两组的平均分
SELECT gender, AVG(math) from student GROUP BY gender;
-- 分别统计男女同学的人数
SELECT gender,COUNT(id) from student GROUP BY gender;
-- 分组前先进行条件限定
SELECT gender,COUNT(id) from student WHERE math>65 GROUP BY gender;
SELECT gender,COUNT(id) 人数 from student GROUP BY gender HAVING 人数>2;
注意: 1.分组之后查询的字段:分组字段、聚合函数。
2.where和having的区别?
①where在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不 满足条件则不会被查询出来。
②where不可以跟聚合函数判断,但是having可以使用聚合函数
7.分页查询
- 1.语法:limit 开始的索引, 每页查询的条数;
- 2.公式:开始的索引 = (当前页码 - 1) * 每页显示的条数
- 3.分页操作中的limit语句是MySQL数据库
-- 每页显示三条记录
SELECT * FROM student LIMIT 0,3;