查询和某某东西完全一样时用 行子查询 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;