mysql基础试题
– 查询学生表中有几名学生的信息.显示学号
select distinct 学号 from 学生表;
distinct的作用是排除重复这里是按学号排除重复。
例如一个student表
select distinct name,sid,age from student;
注意此时distinct name 后有逗号 这时会返回name,sid,age,如果没有则代表sid是别名不要搞错了
– 查询学生表中性别为女的学生所有信息
select * from 学生表 where 性别 = ‘女’;
– 查询成绩表中学生所有成绩,按照课程号升序,成绩降序排列
select * from 成绩表 order by 课程号 asc,成绩 desc;
这样写会优先按课程号排序同一个课程时按成绩排序
– 查询成绩表中学生所有成绩,按照课程号升序,成绩降序排列,显示前5条数据
select * from 成绩表 order by 课程号 asc,成绩 desc limit 0,5;
limit是mysql独有的关键字 其他数据库不适用 0代表从第一条开始 5代表查询5条
– 对各课程的成绩按照[100-85(含)]、[85-70(含)]、[70-60(含)]、[60以下]分段,并统计各分段数人数和课程名
– 定义条件:成绩在100-85(含)为[100-85(含)]段,在85-70(含)为[85-70(含)]段,在70-60(含)为[70-60(含)]段,小于60就是[60以下]分段;
– 把成绩表score和课程表course交叉联结(右联结),显示课程号、课程名、和分数段;
– 按课程号、课程名进行分组,对分组结果的人数按照上上述的逻辑条件计数;
select sr.课程号,cs.课程名称,
sum(case when 成绩 between 85 and 100 then 1 else 0 end) as ‘100-85分(含)’,
sum(case when 成绩 between 70 and 85 then 1 else 0 end) as ‘70-85分(含)’,
sum(case when 成绩 between 60 and 75 then 1 else 0 end) as ‘60-75分(含)’,
sum(case when 成绩 < 60 then 1 else 0 end) as ‘60分以下’
from score as sr right join course as cs on sr.课程号=cs.课程号
group by sr.课程号,cs.课程名称;
– 对每门课程进行分组,计算每门课程有几名学生
select 课程号,count(学号) from 表名 group by 课程号;
– 计算平均成绩大于等于80分的课程并根据成绩降序排,并获取第一行
select courseId ,avg(成绩) from courseselect group by courseId having avg(成绩) >80 order by avg(成绩) desc limit 1;
– 查询出每门课程的及格人数和不及格人数
select 课程号,sum(case when 成绩>90 then 1 else 0 end) as 及格人数,
sum(case when 成绩<90 then 1 else 0 end) as 不及格人数 from 成绩表 grhaooup by 课程号;
– 每一科成绩都大于该科平均成绩学生的学号和成绩
select 课程号,学号,成绩 from 成绩表 as sc1 where 成绩> (select avg(成绩) from 成绩表 as sc2 where sc1.课程号= sc2.课程号 group by 课程号);
– 查询大于平均成绩学生的学号和成绩
SELECT 学号,成绩 FROM 成绩表 WHERE 成绩 > (SELECT AVG(成绩) FROM 成绩表);
– 查找所有选修了0001号课程的课程的学生,并显示他们的姓名
select 姓名 from 学生表 where exists(select * from score where 学号=学生表.学号 and 课程号=‘0001’);