between .. and .. 表示区间
查询语文成绩在 60-80 分之间的学员信息
select * from students
WHERE score BETWEEN 60 AND 80
AND course = "语文";
-- 查询 scores 表中 score 在 10-40 , 60-80 的同学信息
SELECT * FROM scores
WHERE
score BETWEEN 10 and 40
OR
score BETWEEN 60 and 80;
-- students 表中 语文成绩 40-80 或者 数学成绩 80-100 的人员信息;
SELECT * from students
WHERE
(course = "语文" and score BETWEEN 40 and 80)
or
(course = "数学" and score BETWEEN 80 and 100)
is null 数据为空
查询年龄为空的数据
SELECT * FROM students
WHERE age IS null;
distinct 去除重复数据
查询students 表中的人员姓名,如果有多个,那么只显示其中的一个。
select distinct(username) from students;
-- 查询 students 表中 科目信息 要求去重;
select DISTINCT(course) from students;
-- 查询 students 表中 的性别(去重);
SELECT DISTINCT(sex) from students;
limit 限制返回结果的数量;
查看students表中的前5行内容;
-- 查看前5行内容
SELECT * from students
LIMIT 5;
limit 后面跟两个数字 表示从指定位置开始,往后数;
# limit 可以跟 多个字段
select * from students
limit 1,3 -- 从第1+1行开始,往后数3行
SELECT * from students
LIMIT 2,5; -- 从第2+1行开始,往后数5行
order by 进行排序
-- 将students表中的数据降序排列
SELECT * from students
ORDER BY id DESC;
-- 将students 表中的数据 按照 score 从大到小进行 排序, 如果成绩一样,按照年龄从小到大排序;
SELECT * from students
ORDER BY score desc,age asc; -- desc 降序 asc 升序
-- 将students 表中的数据 按照 score 从大到小进行 排序, 如果成绩一样,按照年龄从小到大排序,如果年龄一样,id 升序;
select * from students
order by score desc, age asc, id asc;
查询最后5条数据
-- 1. 先将数据按照id 进行倒序
SELECT * FROM students ORDER BY id desc;
-- 2. 提取 5条数据
SELECT * FROM students ORDER BY id desc LIMIT 5;
-- 3. 将结果再次 倒序
select * from (
SELECT * FROM students ORDER BY id desc LIMIT 5 -- 结果作为查询的临时表
) as tmp -- 临时表起别名 别名可以任意
ORDER BY id ;
查询倒数第10条数据-倒数第5条数据;
SELECT * FROM(
SELECT * FROM students ORDER BY id DESC LIMIT 10
) as tmp
ORDER BY id
LIMIT 6 ;
-- 从倒数第10行,倒数第5行
select * from
(SELECT * from students ORDER BY id DESC LIMIT 4,6) as tmp
ORDER BY id asc;
练习
- 查询students表中 语文成绩最高分是多少?
- 查询students表中 语文成绩第二高分数是多少?
- 查询students表中 语文成绩最低分是多少? ```sql — 语文的最高成绩是多少? SELECT DISTINCT(score) from students — 数据去重 WHERE course=”语文” — 语文成绩 ORDER BY score desc LIMIT 1 — 排序
— 语文的第二高成绩是多少? SELECT DISTINCT(score) from students — 数据去重 WHERE course=”语文” — 语文成绩 ORDER BY score desc LIMIT 1,1 — 排序
— 语文的最低成绩是多少? SELECT DISTINCT(score) from students — 数据去重 WHERE course=”语文” — 语文成绩 ORDER BY score ASC LIMIT 1 — 排序
4. 查询语文成绩分数最高的人的姓名,年龄
```sql
select username,age from students
WHERE course="语文"
AND score = ( -- 查找最高分
SELECT DISTINCT(score) from students -- 数据去重
WHERE course="语文" -- 语文成绩
ORDER BY score desc LIMIT 1
);
max() 最大值
查询 scores 表中 score 最大的值是多少?
select max(score) from scores;
-- 查询 score 为最高 的人员信息;
SELECT * from scores -- 根据最高分找人
where score = (
SELECT max(score) from scores -- 找到最高分
);
min() 最小值
查询scores 表中 score 最小的值
select min(score) from scores;
-- 查询 score 为最低 的人员信息;
select * from scores
WHERE score = (
SELECT min(score) from scores
)
avg() 平均值
查询 scores表中学生的平均成绩;
select avg(score) from scores;
-- 查询 高于平均成绩的同学信息;
select * from scores
where score > (
SELECT avg(score) from scores
)
sum() 总和
求出班级的总成绩
select sum(score) from scores;
SELECT sum(score) as 总成绩, avg(score) as 平均成绩, max(score) as 最高分, min(score) as 最低分 FROM scores;
count() 数量
统计students表中有多少位同学
-- 统计students表中有多少个同学
select count(username) from students;
-- 去除重复数据
SELECT DISTINCT(username) from students;
-- 1. 先去重
-- 2. 再统计
SELECT count(username) from ( -- 从去重之后的结果中进行统计
SELECT DISTINCT(username) from students -- 去重的结果作为临时表
) as tmp;
-- 统计students表中有多少个同学
select count(distinct(username)) from students;
练习
- 查询 students 中 username为林冲的所有信息
- 查询 students中 林冲 的总成绩,平均成绩
- 查询 students表中 林冲的最高分和最低分
-- 查询 students 中 username为林冲的所有信息
select * FROM students WHERE username = "林冲";
-- 查询 students中 林冲 的总成绩,平均成绩
SELECT sum(score), avg(score) from students
WHERE username = "林冲";
-- 查询 students表中 林冲的最高分和最低分
SELECT max(score), min(score) from students
WHERE username = "林冲";
作业
表名 checkin
- 统计2021-07-01 签到的人员信息 ```sql
SELECT * from checkin WHERE checkintime like “2021-07-01%”;
2. 统计2021-07-01 共签到多少人
```sql
SELECT COUNT(DISTINCT(name)) from checkin WHERE checkintime like "2021-07-01%";
- 统计签到次数最多的人的姓名 ```sql — 1. 统计姓名出现次数最多 select count(name) from checkin GROUP BY name ORDER BY COUNT(name) desc LIMIT 1
— group by 分组 分组的查询条件为 having SELECT name from checkin GROUP BY name HAVING COUNT(name) = 3
— 组合在一起 SELECT name from checkin GROUP BY name HAVING COUNT(name) = ( select count(name) from checkin GROUP BY name ORDER BY COUNT(name) desc LIMIT 1 )
---
学生表 students<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/87080/1625218039701-0d113e60-bcf1-4e19-aa82-7056a4f36c43.png#clientId=u1c87cf9f-0697-4&from=paste&height=308&id=ubd60fc6b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=615&originWidth=615&originalType=binary&ratio=1&size=54653&status=done&style=none&taskId=u8337305e-06e3-4887-95c4-6f464bbab18&width=307.5)
1. 统计学生的姓名(去重)
1. 统计男生同学姓名
1. 统计女生有多少人
1. 统计数学成绩,并降序排序
1. 查询年龄 18岁的成员的名字
1. 查询年龄19 的个数
```sql
select score from students where course="数学" order by score desc;
select distinct (username) from students where age=18;
select count(distinct(username)) from students where age=19;
- 查询总分最高的学生姓名 (需要预习分组)