mysql 划重点啦,,

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

  

原文地址:https://www.cnblogs.com/manjianlei/p/11285629.html