between .. and .. 表示区间

查询语文成绩在 60-80 分之间的学员信息

  1. select * from students
  2. WHERE score BETWEEN 60 AND 80
  3. AND course = "语文";

image.png

-- 查询 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;

image.png

distinct 去除重复数据

image.png
查询students 表中的人员姓名,如果有多个,那么只显示其中的一个。

select distinct(username) from students;

image.png


-- 查询 students 表中 科目信息 要求去重;
select DISTINCT(course) from students;


-- 查询 students 表中 的性别(去重);
SELECT DISTINCT(sex) from students;

limit 限制返回结果的数量;

查看students表中的前5行内容;

-- 查看前5行内容
SELECT * from students
LIMIT 5;

image.png
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;

image.png

-- 将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 ;

image.png

查询倒数第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;

image.png

练习

  1. 查询students表中 语文成绩最高分是多少?
  2. 查询students表中 语文成绩第二高分数是多少?
  3. 查询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
);

image.png

max() 最大值

查询 scores 表中 score 最大的值是多少?

select max(score) from scores;
-- 查询 score 为最高 的人员信息;

SELECT * from scores               -- 根据最高分找人
where score = (
    SELECT max(score) from scores    -- 找到最高分
);

image.png

min() 最小值

查询scores 表中 score 最小的值

select min(score) from scores;
-- 查询 score 为最低 的人员信息;

select * from scores
WHERE score = (
    SELECT min(score) from scores
)

image.png

avg() 平均值

查询 scores表中学生的平均成绩;

select avg(score) from scores;
-- 查询 高于平均成绩的同学信息;
select * from scores
where score > (
    SELECT avg(score) from scores
)

image.png

sum() 总和

求出班级的总成绩

select sum(score) from scores;
SELECT sum(score) as 总成绩, avg(score) as 平均成绩, max(score) as 最高分, min(score) as 最低分 FROM scores;

image.png

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;

练习

  1. 查询 students 中 username为林冲的所有信息
  2. 查询 students中 林冲 的总成绩,平均成绩
  3. 查询 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
image.png

  1. 统计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%";
  1. 统计签到次数最多的人的姓名 ```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;
  1. 查询总分最高的学生姓名 (需要预习分组)