當前位置:成語大全網 - 漢語詞典 - 數據庫SQL語言

數據庫SQL語言

SQL練習

壹個學生課程數據庫

1查詢無考試成績的7號課程的學號。

從sc中選擇sno,其中cno='7 '且等級為空

2.查詢7號課程90分以上或60分以下學生的學號。

從sc中選擇sno,其中grade & gt90或年級& lt60

3查詢課程名稱以“數據”開頭的所有課程的課程號和課程名稱。

Select cno,cname from c,其中cname like' data% '

4.查詢每個學生所有課程的平均分,輸出學號和平均分。

按sno從sc組中選擇sno,avg(grade)

5.查詢每門課程的選修人數,輸出課程號和選修人數。

Select cno,count(*) from sc group by cno

6.查詢選修課程7的學生的學號、姓名和性別。

Select s.sno,sname,ssex from s,sc其中s.sno=sc.sno,cno = '7 '

7詢問選修課程7的學生的平均年齡。

Select avg(sage) from s,sc其中s.sno=sc.sno,cno = '7 '

8.查詢30多名學生選擇的課程號。

通過具有count(*)& gt;的cno從sc組中選擇sno。30

9查詢到目前為止沒有考砸的學生的學號。

答:從s中選擇sno,其中sno不在(從sc中選擇sno,其中等級& lt60 )

b:從sc組中選擇sno,sno具有min(等級)>=60

1用可選課程號C2查詢學生的學號和成績。

選擇sno,從sc分級,其中cno =“C2”

找出學生編號和選修課編號C4的名字。

Select s.sno,sname from s,sc其中s.sno=sc.sno,cno='C4 '

找出名為數學的選修課的學號和名字。

從s,sc,c中選擇s.sno,sname

其中s.sno=sc.sno,c.cno=sc.cno,cname = 'Maths '

找出C2或C4的學生編號。

從sc中選擇不同的sno,其中cno在(' C2 ',' C4 ')

或者:選擇不同的SnO from where cno =' C2 '或cno =' C4' 5找出選修C2和C4課程的學生人數。

從sc中選擇sno,其中cno ='C2 '和sno in(

Select SnO from where CNO =' C4') 6找出不選C2課程的學生的姓名和年齡。

select sname,sage from s where SnO not in(select SnO from sc where cno = ' C2 ')

或者:

select sname,sage from s where not exist(select * from sc where sc . SnO = s . SnO and cno = ' C2 ')

找出所有上過數據庫課程的學生的名字。(同3)

從s,sc,c中選擇s.sno,sname

其中s.sno = sc.sno,c.cno = sc.cno,cname =' database '

8找出數據庫課程不及格的女生名字。

嵌套:

選擇snake from where ssex =' female '和snoin(選擇sno from where grade

連接:

從s、sc、c中選擇sname

其中s.sno = sc.sno,c.cno = sc.cno,ssex = '女性', cname = '數據庫'和等級

Select cname,avg (grade) from sc,其中c . cno = sc . cno group by sc . cno 10求出每個學生的平均分,輸出學生的姓名和平均分。

select sname,avg(grade) from s,sc其中s.sno=sc.sno group by sc.sno

11找出至少有30名學生選修的課程名稱。

select cname from c where cno in(select cno from sc group by cno having count(*)& gt;=30 )

12找出至少修過3門課的學生的名字。

select sname from s where SnO in(select SnO from sc group by SnO having count(*)& gt;=3)

13找出所有課程成績不低於90分的學生姓名。

select sname from s where SnO not in(select SnO from sc where grade & lt;90)

14*找出數據庫課程成績不低於本課程平均分的學生姓名。

Select sname from s where sno in(

Select sno from sc,其中sc.cno = c.cno,cname =' database' and。

年級& gt(select avg (grade) from sc,其中sc.cno = c.cno,cname =' database ')。

15找出各系男女生的平均年齡和人數。

Select sdept,ssex,avg(sage),count(*) from s

按sdept,ssex分組

16找出計算機系(JSJ)課程平均分最高的學生的學號和姓名。

Select sc.sno,sname from s,sc其中s.sno=sc.sno,sdept='JSJ '

按具有平均值(等級)的序號分組

(Select top 1 avg(grade)from sc,s其中s.sno=sc.sno,sdept='JSJ '

按sc分組。sno order by avg (grade) desc)三個客戶——商品數據庫包括三個表:KH、FP和ywy。

1查詢工資在1000-3000元之間的男業務員姓名和辦公室號。

從ywy中選擇yname,Ono,其中薪金介於1000和3000之間,ysex = '男性'

2查詢各辦事處業務員人數,輸出辦事處號及對應號。

Select Ono,count(*) from YWY group by Ono

查詢每個客戶在2002年5月份購買的總金額,輸出客戶號和對應的總金額。

Select Kno,sum(Fmoney)from FP where fdate between ' 2002 . 5 . 1 ' and ' 2002 . 5 . 31 '

按Kno分組

4.查詢2002年5月購買5次以上的所有客戶號,並按客戶號升序排序。

select Kno from FP where fdate between ' 2002 . 5 . 1 ' and ' 2002 . 5 . 31 '

Group by有計數的Kno)>五

按Kno ASC排序

查壹下各個辦公室男女業務員的平均工資。

按Ono,Ysex從YWY組中選擇Ono,Ysex,avg(薪金)

6.查詢2002年5月從王海亮業務員處購買的商品的客戶號、客戶名稱、聯系電話。

選擇Kno,Kname,phone from KH where Kno in(

select kno from FP where fdate between ' 2002 . 5 . 1 ' and ' 2002 . 5 . 31 '

YNO = (Select YNO from YWY其中YNAME = '王海亮')7查詢所有薪資高於NO的業務員人數、姓名、薪資。1538.

Select yno,Yname,salary from YWY where salary & gt

(從YWY中選擇薪金,其中Yno='1538 ')

8.查詢與業務員1538同辦公室所有其他業務員的電話和姓名。

Select Yno,Yname from YWY where Yno & lt& gt1538 '和小野在(

從YWY中選擇Ono,其中Yno='1538 ')

9查詢總銷售額最高的業務員編號。

通過Yno Having sum(Fmoney) =從FP組中選擇Yno

(Select top 1 sum(Fmoney)from FP group BY Yno ORDER BY sum(Fmoney)desc)

10查詢所有業務員的人數、姓名、薪資以及其他薪資高於他的業務員的平均薪資。

使用自連接

選擇y1。Yno,y1。Yname,y1.salary,avg( y2。工資)從YWY y1,YWY y2

其中y1。Yno & lt& gty2。Yno和y 1 . salary & lt;y2 .工資

按y1分組。Yno

沒有薪水沒有薪水

1 100 1 100

2 120 2 120

3 90 3 90

4 110 4 110四中的數據庫裏有壹張表:

學生選課表:由五個屬性組成:板和代碼、班號、姓名、科目、年級,關系模式如下

SC(BJDM,BNXH,XSXM,KM,CJ),其中(BJDM,BNXH)為主代碼。

註:每個學生保留壹份各科成績記錄,包括“語文”、“數學”、“外語”。1找出每個班級的班級代碼,學生人數,平均成績。

通過BJDM從SC組中選擇BJDM,count(*),avg(CJ)

2找出每個學生的班級代碼,學生姓名,考試科目數和總成績。

從SC中選擇BJDM,XSXM,count(*),sum(CJ)

按BNXH分組

輸出壹個表格,每個學生壹條記錄,包括:班級代碼,姓名,語文成績,數學成績,外語成績。

方法1:使用視圖

將視圖v1 (bjdm,xsxm,yw,sx,wy)創建為

Select bjdm,xsxm,CJ,0,0 from sc其中km =' Chinese '

聯盟

Select bjdm,xsxm,0,CJ,0 from sc其中km =' mathematics '

聯盟

從sc中選擇bjdm,xsxm,0,0,CJ其中km = '外語'從bjdm,xsxm的v1組中選擇bjdm,xsxm,sum(yw)作為語言,sum(sx)作為數學,sum(wy)作為外語。

方法2:自連接

從sc a,sc b,sc c中選擇a.bjdm,a.xsxm,a.km,a.cj,b.km,b.cj,c.km,c.cj

其中a.bjdm=b.bjdm,a.bnxh= b.bnxh,b.bjdm=c.bjdm,b.bnxh= c.bnxh

A.km = '中文'和b.km= '數學'和c.km= '外語'方法三:使用存儲過程(略)

輸出壹個表格:每壹個60分以下的學生對應壹條記錄,包括字段:班級代碼、姓名、最低分。Select bjdm,xsxm,min(CJ)from sc where grade & lt;60分組by bjdm,xsxm5輸出壹個表格:每壹個60分以下的學生對應壹條記錄,包括字段:班級代碼,姓名,最高分,平均分。

獲取平均成績:創建視圖v1 (bjdm,bnxh,avg _ CJ)為。

select bjdm,bnxh,avg(CJ from sc其中bjdm,bnxhselect sc.bjdm,sc.xsxm,max(cj),avg_cj from sc,V1

其中sc.bjdm=v1.bjdm和sc.bnxh=V1.bnxh和cj & lt60

Group by sc.bjdm,sc.xsxm6輸出壹個表:每個成績不低於60的學生對應壹條記錄,包括字段:班級代碼、姓名、平均成績。從sc中選擇bjdm,xsxm,avg(cj)

其中sno不在(從sc中選擇sno,其中等級& lt60)

Group by bjdm,xsxm7輸出壹個表:每個學生對應壹條記錄,包括字段:班級編碼,姓名,去掉最低分後的平均分。

方法1:

獲得每個學生的最低分數:

將視圖V1 (bjdm,bnxh,min_cj)創建為

通過bjdm,bnxh從sc組中選擇bjdm,bnxh,min(cj)從sc,v1中選擇sc.bjdm,sc.xsxm,avg(cj)

其中sc.bjdm=v1.bjdm和sc.bnxh=v1.bnxh和sc.cj & lt& gtv1.min_cj

按bjdm、bnxh方法2分組:

select sc.bjdm,sc.xsxm,(sum(CJ)-min(CJ))/count(*)from sc

Group by bjdm,bnxh8輸出壹個表:每個科目對應壹條記錄,包括字段:科目,去掉最低分後的平均分。

方法1:

獲得每門課程的最低分:

將視圖V1 ( km,min_cj)創建為

按km從sc組中選擇km,min(cj)

從sc,v1中選擇sc.km,avg(cj)

其中sc.km=v1.km,sc.cj & lt& gtv1.min_cj

按sc.km分組

方法二:

select km,(sum(CJ)–min(CJ))/count(*)from sc

group by km Supplement 9:Output Form:每個科目對應壹條記錄,包括字段:科目、去除最低分和最高分後的平均分。

從sc中選擇km,(sum(CJ)–min(CJ)–max(CJ))/count(*)

group by km five數據庫存儲了某大學自1990以來的四六級考試情況,並規定:

1英語四六級考試每年兩次,分別在6月和65438+2月。

四級沒過的同學不能報考六級;

3只要沒考到某壹級就可以重復考;

4壹旦某壹等級考試通過,就不能再報考該等級的考試;

妳可以報名,但不能參加考試。

數據庫中有兩個表,對應的關系模式如下:

學生表:S(Sno,Sname,Ssex,Sage,Sdept),其中Sno為主代碼。

考試形式:E(Sno,年,月,級,級),學號,年,月,級,級。

其中(Sno,年,月)為主代碼。1.找出每壹次四六級考試的參考人數和平均分(報名但沒參加的不算)。

選擇年、月、級別、計數(*)、平均(等級)

按年、月、級別2分組。找出每次四級考試平均分最高的部門(報名但沒考的不算)。

A: Select sdept from s,e其中s.sno=e.sno

其中級別=4

按sdept分組

有平均成績& gt=全部(

Select avg(grade) from s,e where s.sno=e.sno where level = 4 Group by sdept)B:Select top 1 sdept from s,e where s . SnO = e . SnO

其中級別=4

按sdept分組

排序依據(平均(等級)desc

3.找出通過六級考試的學生的學號、姓名、性別(用連線法)。

從s,e中選擇s.sno,sname,ssex

其中s.sno=e.sno,level=6,grade & gt=60

4.找出同壹年參加大學英語四六級考試的學生的學號。

1)從E中選擇sno

其中(級別=4,等級& gt=60)或級別=6

按有計數的年份分組(*)& gt;=22)從E X中選擇sno,其中level=4,grade & gt=60並且存在(

Select * from e y其中y.sno = x.sno且year = x.year且level = 6) 5 .找出六級只過壹次的學生的學號。

從E中選擇sno

其中級別=6

按sno分組

計數(*)=1錯誤。為什麽?1)從E中選擇sno

其中級別=6

按sno分組

具有count(*)=1和max(grade)>=602)從E中選擇sno,其中level=6,grade & gt=60且sno in(

從E中選擇sno,其中level=6由計數(*)=1的sno分組)

6.找出目前為止還沒有通過四級考試的學生的學號(包括還沒有參加考試的或者參加了考試但是兩者都沒有通過的)。

從E中選擇sno,其中level=4

按sno分組

具有最大值(等級)& lt60

聯盟

從s中選擇sno,其中sno不在(從E中選擇sno)

7.找出六級考試合格人數最少的考試年份和月份(如有並列,用壹句SQL句子列出)。

從E中選擇年、月

其中level = 6,grade & gt=60

按年、月分組

有計數(*)& lt;=全部

(從E中選擇count(*),其中level=6,grade & gt=60組按年、月)

補充:查壹下每門課的通過率。

1獲取每門課程的選修人數2獲取每門課程的合格人數3獲取每門課程的合格人數/1創建視圖v _ all (cno,CNT) as select cno,count (*) from sc group by cno。

2創建視圖v_pass( cno,cnt_pass)作為select cno,count(*)from sc where grade & gt;=60

按cno分組

3 select cno,CNT _ pass * 1.0/CNT from v _ all,v_pass其中v_all.cno = v_pass.cno