一次筆試題目附答案(sql答卷)
已知以下表結構(括號內為表名和字段名,用SQL寫出以下題目答案):

業務情景限制:
1、 一個班級有且有多名學生,一名學生只屬於一個班級;
2、 學生有可能沒有成績;
考題:
(1) 查詢所有學生的信息(學號、姓名、性別、班級名稱)
SELECT x.xh,x.xm,x.xb,b.bjmc FROM bjb b,xsb x WHERE x.bjb_id = b.id
(2) 查詢所有人的課程分數(學號、姓名、性別、班級名稱、語文分數、數學分數)
SELECT x.xh,x.xm,x.xb,b.bjmc,c.yw,c.sx FROM bjb b,xsb x,cjb c WHERE x.bjb_id = b.id AND x.id = c.id
(3) 查詢語文分數比“張三”的高的學生(學號、姓名、性別、班級名稱、語文分數)
SELECT x.xh,x.xm,x.xb,b.bjmc,c.yw FROM bjb b,xsb x,cjb c WHERE x.bjb_id = b.id AND x.id = c.id AND c.yw > (SELECT c.yw FROM xsb x,cjb c WHERE x.id = c.id AND x.xm='張三' )
(4) 查詢各科都合格【分數>=60分】的學生(學號、姓名、語文分數、數學分數)
SELECT x.xh,x.xm,c.yw,c.sx FROM bjb b,xsb x,cjb c WHERE x.bjb_id = b.id AND x.id = c.id AND c.yw >= 60 AND c.sx >= 60 GROUP BY x.xh
(5) 查詢總分數(語文+數學)>=150的學生信息(學號、姓名、班級名稱、總分數)
SELECT x.xh,x.xm,b.bjmc,sum(c.yw+c.sx) AS zf FROM bjb b,xsb x,cjb c WHERE x.bjb_id = b.id AND x.id = c.id AND (c.yw + c.sx) >= 150 group by x.xh
(6) 查詢沒有參加考試【沒有成績表】的學生(學號、姓名、性別、班級名稱)
select x.xh,x.xm,x.xb,b.bjmc from bjb b ,xsb x ,cjb c where x.bjb_id=b.id and x.id not in (select id from cjb) group by x.xh,x.xm,x.xb,b.bjmc
(7) 假設分數>=60分合格,分析學生的成績是否合格
(學號、姓名、語文合格情況[合格/不合格]、數學合格情況[合格/不合格])
SELECT x.xh,x.xm,IF(c.yw >= 60,'合格','不合格') AS '語文合格情況',IF(c.sx >= 60,'合格','不合格') AS '數學合格情況' FROM bjb b,xsb x,cjb c WHERE x.bjb_id = b.id AND x.id = c.id
(8) 查詢有掛科【分數<60分】現象的學生(學號、姓名、語文分數、數學分數)
select x.xh,x.xm,c.yw,c.sx from bjb b ,xsb x ,cjb c where x.bjb_id=b.id and x.id=c.id and (c.yw < 60 or c.sx < 60 )
(9) 查詢所有班級的平均分數(班級編號、班級名稱、語文平均分數、數學平均分數)
select b.id,b.bjmc,AVG(c.yw) AS ywpjf,AVG(c.sx) AS sxpjf from bjb b ,xsb x, cjb c where c.id=x.id and b.id=x.bjb_id group by b.id
(10) 查詢班級人數>=30的班級(班級編號、班級名稱、人數)
select b.id,b.bjmc,count(c.id) AS rs from bjb b ,xsb x, cjb c where c.id=x.id and b.id=x.bjb_id group by b.id,b.bjmc having count(c.id) >=30
本例子是通過mysql測試通過,如果用oracle請自行修改!!
