面試題一SQL語句
學生表:
Student(sid,sname,sage,ssex) --學生編號,學生姓名,出生日期,學生性別
課程表:
Course(cid,cname,tid) --課程編號,課程名稱,教師編號
教師表
Teacher(tid,tname) --教師編號,教師姓名
成績表
Sc(sid,cid,score) --學生編號,課程編號,分數
SQL語句:
-
查詢“01”課程比“02”課程成績高的學生的信息及課程分數
select a.*,b.score,c.score from student a left join sc b on a.sid=b.sid and b.cid='01' left join sc c on a.sid=c.sid and c.cid='02' where b.score>c.score
-
查詢平均成績大於等於60分的同學的學生編號,學生姓名和平均成績
select a.sid,a.sname,avg(sc.score) avg_score from student a,sc where a.sid = sc.sid group by a.sid,a.sname having avg_score>=60 order by a.sid;
-
查詢所有學生的學生編號,學生姓名,選課總數,所有課程訂單總成績
select a.sid,a.sname,count(b.cid),sum(b.score) from student a left join sc b on a.sid=b.sid group by a.sid,a.sname order by a.sid
-
統計課程分01最高的前三名學生信息
select a.sname,sc.score,sc.cid from student a join sc on a.sid=sc.sid where sc.cid='01' order by sc.score desc limit 3;
-
統計每個學生的選課總數
select a.sid,a.sname,count(b.cid) from student a left join sc b on a.sid=b.sid group by a.sid,a.sname
-
查詢沒學過“張三”老師授課的學生信息
select a.* from student a left join sc b where not exists( select * from course c inner join teacher d on c.tid=d.tid inner join sc e on c.cid=e.cid where d.tname='張三' and e.sid = a.sid ) group by 1,2,3,4;
-
查詢學過編號“01”並且也學過編號“02”的課程的學生信息
select a.* from student a inner join sc b on a.sid = b.sid and b.cid ='01' inner join sc c on a.sid = c.sid on c.cid='02';