一.简单查找——查找学生
1. 查询姓”猴”的学生名单
Select * from student
Where 姓名 like “猴%”;
2. 查询姓名中最后一个字是”猴”的学生名单
Select *from students
Where 姓名 like “%猴”;
3. 查询姓名中带“猴”的学生名单
Select from students
Where 姓名 like “%猴%”;
一.简单查询——汇总分析
4. 查询课程编号为“0002”的总成绩
Select sum(成绩)
from score
Where 课程号=“0002”;
5. 查询选了课程的学生人数
Select count (distinct 学号)
From score;
一.简单查询——分组
6. 查询各科成绩最高和最低的分
Select max(成绩) as 最高分,min(成绩) as 最低分
From score
Group by 课程号;
7. 查询每门课程被选修的学生数
Select 课程号,count(学号)
From score
Group by 课程号;
8. 查询男生,女生人数
Select 性别 , count(*)
From student
Group by 性别;
一.简单查询——分组结果的条件
9. 查询平均成绩大于60分学生的学号和平均成绩
Select 学号 avg(成绩)
From score
Group by 学号
Having avg(成绩)>60;
10. 查询至少选修两门课程的学生学号
Select 学号,count(课程号) as 选修课程数目
From score
Group by 学号
Having count(课程号)>=2;
11. 查询同名同姓学生名单并统计同名人数
Select 姓名, count(*)
From student
Group by 姓名
Having count(学号)>=2;
12. 查询不及格的课程并按课程号从大到小排列
Select 课程号
from score
Where 成绩<60
Order by 课程号 desc;
13. 查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序列
Select 课程号,avg(成绩) as 平均成绩
From score
Group by 课程号
Order by 平均成绩 asc, 课程号 desc;
14. 检索课程编号为“0004”且分数小于60的学生学号,结果按按分数降序排列
Select 学号 ,成绩from score
Where 课程编号=0004 and 成绩<60;
Order by 分数 desc;
15. 统计每门课程的学生选修人数(超过2人的课程才统计)要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排列
Select 课程号,count(学号) as ‘选修人数’
From score
Group by 课程号
Having count(学号)>2
order by 选修人数,课程号;
16. 查询两门以上不及格课程的同学的学号及其平均成绩
Select 学号 avg(成绩) from score
Where 成绩<60
Group by 课程号
Having count(课程号)>2;
注意技巧:
Where 是查询条件,在分组之前
Having对分组结果指定条件
Order by 对排序结果排序一般在最后
二.复杂查询——子查询
17. 查询所有课程成绩小于60分学生的学号,姓名
Select 学号,姓名
from student
Where 学号 in (
Select 学号 From student
Where 成绩<60);
18. 查询没有学全所有课的学生的学号,姓名
Select 学号,姓名
From student
Where 学号 in (
Select 学号
From score
Group by 学号
Having count(课程号)<(select count (课程号) from course);
19. 查询出只选修了两门课程的全部学生的学号和姓名
Select 学号,姓名
From student
Where 学号 in(
Select 学号 from score
Group by 学号
Having count(课程号)=2);
20.1990年出生的学生名单
Select 学号,姓名 from student
Where year(出生日期)=1990;
21.查询各科成绩前两名的记录
Select * from score
Group by 课程号
Order by 成绩 desc
Limit 2;
三.多表查询——联结
22.查询所有学生的学号,姓名,选课数,总成绩
Select a.学号,a.姓名,count(b.课程号) as 选课数,sum(b.成绩) as 总成绩
From student as a left join score as b
On a.学号=b.学号
Group by a.学号
23.查询平均成绩大于85的所有学生的学号,姓名和平均成绩
Select a.学号,a.姓名,avg(b.成绩) as 平均成绩
From student as a left join score as b
On a.学号=b.学号
Group by a.学号
Having avg(b.成绩)>85;
24.查询学生的选课情况:学号,姓名,课程号,课程名称
Select a.学号,a.姓名,b.课程号,c.课程名称
From student a inner join score b on a.学号=b.学号
Inner join course c on b.课程号=c.课程号;
25.查询出每门课程的及格人数和不及格人数
Select 课程号,
Sum(case when 成绩>=60 then 1
Else 0
End) as 及格人数,
Sum(case when 成绩 <60 then 1
Else 0
End ) as 不及格数
From score
Group by 课程号;
26.使用分段[100-85],[85-70],[70-60],[<60]来统计各科的成绩,分别统计:各分数段人数,课程号和课程名称
Select a.课程号,b.课程名称
Sum(case when 成绩 between 85 and 100 then 1 else 0 end) as ‘[100-85]’,
Sum(case when 成绩 >=70 and 成绩 <85 then 1 else 0 end) as ‘[85-70]’,
Sum(case when 成绩>=60 and 成绩<70 then 1 else 0 end) as ‘[70-60]’,
Sum (case when 成绩<60 then 1 else 0 end ) as ‘[<60]’,
From score as a right join course as b
On a.课程号=b.课程号
Group by a.课程号,b.课程号;
27.查询课程编号为0003且课程成绩在80分以上的学生的学号和姓名
Select a.学号,a.姓名
From student as a inner join score as b on a.学号=b.学号
Where b.课程号=‘0003’ and b.成绩>80;