SQL server数据库实验(三)数据库的嵌套查询和集合查询
生活随笔
收集整理的這篇文章主要介紹了
SQL server数据库实验(三)数据库的嵌套查询和集合查询
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、針對教學管理數據庫SCT,進行以下各種嵌套查詢與集合查詢
- 1.查詢選修了“數據庫”課程的學生信息
- 2.查詢與學生“李維”在同一個院系的學生選課信息(包括李維)
- 3.對每個選修了課程的學生,查詢他獲得最高成績的課程號和成績
- 4.查詢與“王麗”職稱相同的其他女教師信息
- 5.查詢教師“周小平”和“王建寧”的授課信息,結果按照教師號升序顯示
- 6.查詢至少選修了學生“李維”所選的所有課程的其他學生信息
- 7.查詢至少選修了“數據庫”和“C語言”課程的學生信息
- 8.查詢“計算機”學院與“電子”學院的女學生信息
- 9.查詢選修了“C語言”但是未選修“數據庫”課程的學生信息
- 10.查詢學分是3或4的課程信息
- 11.查詢無人選修的課程的詳細信息
- 二、針對教學管理數據庫SCT,進行以下各種查詢:
- 1.查詢選修了“CS-001”課程,且成績為第3到第5名的學生姓名,要求按照成績的降序輸出
- 2.查詢各門課程選修學生數占學生總數的百分比;(沒有學生選修的課程也要考慮)
- 3.查詢選課門數唯一的學生姓名(選課門數與其他學生都不相同)。(只考慮選修了課程的學生)
一、針對教學管理數據庫SCT,進行以下各種嵌套查詢與集合查詢
1.查詢選修了“數據庫”課程的學生信息
select * from STUDENT055 where SNO in(select SNOfrom SCT055where CNO in(select CNOfrom COURSE055where CNAME = '數據庫'));2.查詢與學生“李維”在同一個院系的學生選課信息(包括李維)
select * from SCT055where SNO in(select SNOfrom STUDENT055where SDEPT in(select SDEPTfrom STUDENT055where SNAME = '李維'));3.對每個選修了課程的學生,查詢他獲得最高成績的課程號和成績
select SNO,CNO,GRADE from SCT055 where GRADE in(select MAX(GRADE)from SCT055group by SNO)4.查詢與“王麗”職稱相同的其他女教師信息
select * from TEACHER055 where TITLE in(select TITLEfrom TEACHER055where TNAME = '王麗') and TSEX = '女';5.查詢教師“周小平”和“王建寧”的授課信息,結果按照教師號升序顯示
select distinct TNO,CNO from SCT055 where TNO in(select TNOfrom TEACHER055where TNAME = '周小平' or TNAME = '王建寧') order by TNO;6.查詢至少選修了學生“李維”所選的所有課程的其他學生信息
SQL語句中沒有蘊涵邏輯運算,但是可以利用謂詞演算等價轉換,它所表達的語義為:不存在這樣的課程y,學生李維選修了y,而學生x沒有選。
select * from STUDENT055 where SNO in (select distinct SNOfrom SCT055 STU1where not exists(select *from SCT055 STU2where STU2.SNO in(select SNO from STUDENT055where SNAME = '李維')andnot exists(select *from SCT055 STU3where STU3.SNO = STU1.SNO andSTU3.CNO = STU2.CNO)) );7.查詢至少選修了“數據庫”和“C語言”課程的學生信息
intersect取交集
select * from STUDENT055 where SNO in(select SNO from SCT055where CNO in(select CNOfrom COURSE055where CNAME = '數據庫') ) intersect select * from STUDENT055 where SNO in(select SNO from SCT055where CNO in(select CNOfrom COURSE055where CNAME = 'C語言') )8.查詢“計算機”學院與“電子”學院的女學生信息
union求并集
select * from STUDENT055 where SSEX = '女' and SDEPT = '計算機' union select * from STUDENT055 where SSEX = '女' and SDEPT = '電子'9.查詢選修了“C語言”但是未選修“數據庫”課程的學生信息
差集
select * from STUDENT055 where SNO in(select SNO from SCT055where CNO in(select CNOfrom COURSE055where CNAME = 'C語言') ) except select * from STUDENT055 where SNO in(select SNO from SCT055where CNO in(select CNOfrom COURSE055where CNAME = '數據庫') )10.查詢學分是3或4的課程信息
select * from COURSE055 where CREDIT = '3'unionselect * from COURSE055 where CREDIT = '4'11.查詢無人選修的課程的詳細信息
select * from COURSE055 where CNO in(select CNOfrom COURSE055 ) except select * from COURSE055 where CNO in(select distinct CNOfrom SCT055 )二、針對教學管理數據庫SCT,進行以下各種查詢:
(以下題目不限制查詢方法)
1.查詢選修了“CS-001”課程,且成績為第3到第5名的學生姓名,要求按照成績的降序輸出
按照邏輯應該是top5減去top2,但是這樣在SQL server2019里得不到正確答案,必須用top5減去top3才能得到第3到第5名。
沒有排序order by時 返回記錄默認從高到低,由于GRADE的index是降序,所以order by GRADE直接得到降序輸出
2.查詢各門課程選修學生數占學生總數的百分比;(沒有學生選修的課程也要考慮)
convert轉換成浮點數相除,concat函數加上百分號,沒有學生選修的課程也要考慮所以使用左外連接。
select CNAME,concat(convert(float,count(SCT055.SNO))/(select count(*)from STUDENT055 )*100,'%') as '選課人數占比' from COURSE055 left join SCT055 on COURSE055.CNO = SCT055.CNO group by COURSE055.CNAME order by count (*) desc3.查詢選課門數唯一的學生姓名(選課門數與其他學生都不相同)。(只考慮選修了課程的學生)
select SNAME from STUDENT055 where SNO in(select X.SNOfrom STUDENT055 X,SCT055where X.SNO = SCT055.SNOgroup by X.SNOhaving count(CNO) not in(select count(CNO)from STUDENT055 Y,SCT055where Y.SNO = SCT055.SNO and Y.SNO !=X.SNOgroup by Y.SNO) )總結
以上是生活随笔為你收集整理的SQL server数据库实验(三)数据库的嵌套查询和集合查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解LightGBM
- 下一篇: 深度学习入门笔记(十五):深度学习框架(