數據庫練習題(1)

一、表的數據結構以下:數據結構

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;

相關文章
相關標籤/搜索