查询和某某东西完全一样时用 行子查询 group_concat(c_id order by c_id)
举例:-- 16、查询和01号同学所学课程完全一样的学生信息
查询至少几个一样时用 列子查询
举例:-- 17、查询至少有一门课与01号同学所学课程一样的学生信息
查询并且时
举例:-- 18、查询选修了01号课程并且也选修了02号课程的学生信息
在一个表中查询某一项比另一项高或者大时用自联结查询、、
举例:-- 19、查询01号课程比02号课程分数高的学生信息及成绩
查询在某一个中不在某一个中时
举例:-- 20、查询选修了01号课程但是没有选修02号课程的学生信息
in ............not in 或者
select stu.*
from sc left join stu on sc.s_id= stu.s_id
group by stu.s_id
having sum(c_id=01)=1 and sum(c_id=02)=0;
-- 22、查询各科成绩最高分,最低分,平均分,合格率:cname
select c_name ,max(score),min(score),avg(score),sum(score>=60)/count(co.c_id) 合格率
from co left join sc on sc.c_id = co.c_id
group by co.c_id;
-- 14、查询所有学生不同课程的成绩及平均成绩:s_id,语文,数学,英语,平均成绩
#第一种方法
select s_id,sum(case when c_id='01' then score else 0 end) 语文,
sum(case when c_id='02' then score else 0 end) 数学,
sum(case when c_id='03' then score else 0 end) 英语,
avg(score) 平均成绩
from sc
group by s_id;
select stu.s_id,sum(case when c_id='01' then score else 0 end) 语文,
sum(case when c_id='02' then score else 0 end) 数学,
sum(case when c_id='03' then score else 0 end) 英语,
avg(score) 平均成绩
from stu left join sc on stu.s_id=sc.s_id
group by stu.s_id;
##第二种方法
select s_id,sum(if( c_id='01',score ,0)) 语文,
sum(if( c_id='02',score ,0)) 数学,
sum(if( c_id='03',score ,0)) 英语,
avg(score) 平均成绩
from sc
group by s_id;