一、設計表 1、設計表 查詢語句之前先設計四張表:student、teacher、course、score student:sid(學號)、sname(姓名)、sage(年齡)、ssex(性別) teacher:tid(老師編號)、tname(老師名字) course:cid(課程序號)、cname(課程名字)、tid(代課老師id) score:sid(學生id)、cid(課程id)、score(成績) 2、找表關系 可以看到四張表之間是有聯系的

二、查詢語句實線 1、查詢(“001”課程比“002”課程成績高)的所有的學生的學號。 思路:先找出上過001課程的學生,再找出上過002課程的學生,再找出兩門課都上過且001比002成績高的學生。所以這里將SELECT sid,score FROM score WHERE cid='001'和SELECT sid,score FROM score WHERE cid='002'的結果集作為查詢對象 SELECT a.sid AS '學號' FROM (SELECT sid,score FROM score WHERE cid='001')AS a, (SELECT sid,score FROM score WHERE cid='002')AS b WHERE a.sid=b.sid AND a.score>b.score; 2、查詢平均成績大於等於60分的同學的學號和平均成績 思路:此處需要注意不加group by的話,沒有分組,聚合函數只會以score表的數據計算,所以avg(score)只有一個結果,但是sid卻有多個。所以此處應該使用group by,這樣的話,avg(score)計算的是分組后每個組的平均成績 SELECT sid,avg(score) FROM score GROUP BY sid HAVING AVG(score)>=60; 3、查詢所有同學的學號、姓名、選課數、總成績 思路:一般應該是能夠將要查詢的內容都聯系在一起的情況下查詢盡可能少的表 SELECT s.sid '學號',sname '姓名',COUNT(score) '選課數',AVG( score) '平均成績' FROM student s,score WHERE s.sid=score.sid GROUP BY s.sid; 4、查詢姓“李”的老師的個數
SELECT count(tname) FROM teacher WHERE tname LIKE "李_%" ;
5、查詢沒學過“葉平”老師的課程的同學的學號、姓名 Not In:不在范圍內 SELECT sid,sname FROM student WHERE sid NOT IN(SELECT score.sid FROM teacher,course,score where course.tid=teacher.tid AND teacher.tname='葉平' AND course.cid=score.cid);
6、查詢所有有掛科的同學的學號和姓名 SELECT s.sid '學號',sname '姓名' FROM student s,score o where s.sid=o.sid AND score<60 GROUP BY sname;
7、查詢至少一門課程與學生學號為“2”的同學所學課程相同的學生學號和姓名 SELECT s.sid,s.sname FROM student s,score o WHERE s.sid=o.sid AND o.cid IN (SELECT cid FROM score WHERE sid=2) AND s.sid<>2 GROUP BY s.sid;
8、統計列印各個科目的成績,各個科目按分數段 課程ID,課程名稱,【100-85】,【85-70】,【70-60】,【60-0】 SELECT course.cid '課程id',course.cname '課程名稱',SUM(CASE WHEN score.score>=85 AND score.score<=100 THEN 1 ELSE 0 END) '100~85', SUM(CASE WHEN score.score>=70 AND score.score<85 THEN 1 ELSE 0 END) '85~70',SUM(CASE WHEN score.score>=60 AND score.score<70 THEN 1 ELSE 0 END) '70~60', SUM(CASE WHEN score.score>0 AND score.score<60 THEN 1 ELSE 0 END) '60~0' FROM course,score WHERE course.cid=score.cid GROUP BY course.cid;
9、查詢每門課程被選修的學生數 SELECT course.cid,COUNT(score.cid) FROM course,score WHERE course.cid=score.cid GROUP BY course.cid;
10、查詢出只選修了一門課程的學生的學號、姓名 SELECT student.sid '學號',student.sname '姓名' FROM student,score WHERE student.sid=score.sid GROUP BY student.sid HAVING COUNT(cid)=1;
11、查詢男生、女生的總人數 (SELECT student.ssex '性別',COUNT(ssex) FROM student WHERE ssex='男') UNION (SELECT student.ssex '性別',COUNT(ssex) FROM student WHERE ssex='女');
12、姓李的師生名單 (SELECT sname FROM student where sname LIKE "李_%") UNION (SELECT tname FROM teacher where tname LIKE "李_%")
13、查詢出同名同姓的學生名單,並統計人數 SELECT sname ,COUNT(sname) FROM student GROUP BY sname HAVING COUNT(*)>1;
14、查詢每門課程的平均成績,結果按平均成績升序排列,如果平均成績相同,就按課程號降序排列。 SELECT cid,AVG( score) FROM score GROUP BY cid ORDER BY AVG(score) ASC,cid DESC;
15、查詢平均成績大於85的所有的學生的學號、姓名、平均成績 SELECT student.sid,student.sname,AVG( score) FROM student,score WHERE student.sid=score.sid GROUP BY student.sid HAVING AVG( score)>85;
16、查詢課程名稱為“離散數學”,且分數低於60分的學生姓名和分數 SELECT sname,score FROM student,score,course where student.sid=score.sid AND score.cid=course.cid AND cname="離散數學" HAVING score<60;
17、查詢所有學生的選課情況:包括學號、課程號、姓名、課程名。 SELECT student.sid '學號',course.cid '課程號',sname '姓名',cname '課程名' FROM student,course,score select * from teacher left JOIN course on teacher.tid=course.tid; WHERE student.sid=score.sid AND score.cid=course.cid; 18、查詢有學生不及格的課程的課程號和課程名,並按照課程號從大到小排列 SELECT course.cid '課程號',cname FROM score,course where course.cid=score.cid AND score<60 GROUP BY course.cid ORDER BY score.cid desc;
19、查詢課程號為003且成績在80分以上的學生的學號、姓名 SELECT student.sid '學號',sname FROM student,score WHERE student.sid=score.sid AND cid='003' AND score>80;
20、查詢各個老師相應的學生總人數 SELECT course.tid,count(DISTINCT(sid)) FROM score,course WHERE course.cid=score.cid GROUP BY course.tid;
21、查詢不同課程成績相同的學生的學號、課程號、學生成績 SELECT a.sid,a.cid,a.score FROM score a,score b WHERE a.sid=b.sid AND a.score=b.score AND a.cid<>b.cid;
22、查詢選“001”課程的所有學生的平均分(去掉一個最高分,去掉一個最低分) SELECT ((SUM(score)-MIN(score)-MAX(score))/(COUNT(score)-2)) '平均成績' FROM score WHERE cid='001';
23、左連接版本 select * from teacher left JOIN course on teacher.tid=course.tid;
24、右連接版本 select *from course right JOIN teacher on teacher.tid=course.tid;