一、表的數據結構以下:數據結構
student表(sno,sname,sage)--學號,姓名,學生年齡函數
course表(cno,cname,tno)--課程代碼,課程名稱,老師工號spa
sc表(sno,cno,score)--學號,課程代碼,分數select
teacher表(tno,tname)--老師工號,老師姓名方法
1)查詢'001'課程比'002'課程成績高的的全部學生學號統計
分析:相關的表sc,數據
方法1:分別找出001課程與002課程全部信息,而後從兩個表中找出001大於002的學生學號,這種方法會用到兩個子查詢,會比較慢查詢
方法2:用聯合查詢,把第1個SC跟第2個SC經過學號聯合再一塊兒,而後找出聯合表1中001的課程,表2中002的課程,且表1中001課程要大於表2中002課程vi
語句:co
select s1.sno from sc s1,sc s2
where s1.sno = s2.sno and s1.cno = '001' and s2.cno = '002' and s1.score > s2.score;
2)查詢平均成績大於60分的學生學號和平均成績
分析:相關的表sc,平均成績:avg(score)
方法1:用1個子查詢,經過學生學號找出全部學生的平均成績,而後從這個 表格中找出大於60分的學生學號及平均成績便可
方法2:顯然第1個方法,比較冗餘,所以在進行分組查詢時,進行條件限制一下就能夠了,group by sno having avg(score)>60
語句:
select sno,avg(score) from sc group by sno having avg(score)>60;
注意:
查詢學生的平均成績時,必須先對錶進行分組查詢。
3)查詢全部學生的學號,姓名,選課數,總成績。
分析:相關的表有學生表student,成績表sc
方法:把student表跟sc表經過學號聯合,而後經過學號進行分組,統計出每一個學號的課程的總數(count),及總成績(sum);
語句:
select s1.sno,s1.sname,count(s2.cno),sum(s2.score)
from student s1,sc s2
where s1.sno = s2.sno group by s1.sno;
4)查詢姓李老師的個數
分析:相關的表teacher
方法:統計個數用count函數,查詢李姓老師,用like'李%'
語句:
select count(tname) from teacher where tname like'李%';
注意:like前面要加上where
5)查詢全部課程成績小於60分的學生姓名和學號
分析:相關的表student,score
方法:把這兩個表student與score經過學號進行聯合,經過學號進行分組(group by),而且選出全部課程成績小於60的學生;
又因是全部的課程成績都要小於60,那麼找出每一個學生中全部課程中最大的課程,當比最大課程還小時,那麼這個學生的全部課程確定全部課程確定都小於60(max(score)<60)
語句:
select s1.sno,s1.sname
from student s1,score s2
where s1.sno = s2.sno group by sno having max(score) < 60;