壹個學生課程數據庫
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