資源描述:
《sql連接、嵌套和集合查詢.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、sql連接、嵌套和集合查詢一、連接查詢1?不同表之間的連接查詢例1.37??查詢每個(gè)學(xué)生及其選修課程的情況。本查詢實(shí)際上是涉及Students與Reports兩個(gè)表的連接操作。這兩個(gè)表之間的聯(lián)系是通過(guò)公共屬性Sno實(shí)現(xiàn)的,因此,其操作命令為:SELECT??Students.*,?Reports.*FROM??Students,?ReportsWHERE??Students.Sno?=?Reports.Sno;?說(shuō)明:若在以上等值連接中把目標(biāo)列中重復(fù)的屬性列去掉則為自然連接,其命令為SELECT??Students
2、.Sno,?Sname,?Ssex,?Sage,?Sdept,?Cno,?GradeFROM??Students,?ReportsWHERE??Students.Sno=?Reports.Sno;例1.38?查詢每個(gè)學(xué)生的學(xué)號(hào)(Sno)、姓名(Sname)、選修的課程名(Cname)及成績(jī)(Grade)。本查詢涉及到三個(gè)表的連接操作,完成該查詢的SQL語(yǔ)句如下:SELECT??Students.Sno,?Sname,?Cname,?GradeFROM??Students,?Reports,?CoursesWHERE
3、??Students.Sno=?Reports.Sno?AND?Reports.Cno=Courses.Cno;2?自身連接例1.39?查`詢每一門(mén)課的間接先修課(即先修課的先修課)。在Courses表關(guān)系中,只有每門(mén)課的直接先修課信息,而沒(méi)有先修課的先修課。要得到這個(gè)信息,必須先對(duì)一門(mén)課找到其先修課,再按此先修課的課程號(hào),查找它的先修課程。這就需要要將Courses表與其自身連接。為方便連接運(yùn)算,這里為Courses表取兩個(gè)別名分別為A,B。則完成該查詢的SQL語(yǔ)句為:SELECT??A.Cno,?A.Cname
4、,?B.Pre_CnoFROM??Courses??A,?Courses??BWHERE??A.Pre_Cno?=B.Cno;3?外連接例1.40把例1.37中的等值連接改為左連接。該左連接操作在SQL?Server?2000中的命令格式為:SELECT?Students.Sno,?Sname,?Ssex,?Sdept,?Cno,?GradeFROM?StudentsLEFT?JOIN?Reports?ONStudents.Sno=?Reports.Sno;說(shuō)明:以上左連接操作也可以用如下的右連接操作代替,其結(jié)果完
5、全一樣。SELECT?Students.Sno,?Sname,?Ssex,?Sdept,?Cno,?GradeFROM?ReportsRIGHT?JOIN?Students?ONReports.Sno=Students.Sno;二、嵌套查詢1?帶謂詞IN的嵌套查詢例1.41?查詢選修了編號(hào)為“C02”的課程的學(xué)生姓名(Sname)和所在系(Sdept)。SELECT??Sname,?SdeptFROM??StudentsWHERE??Sno??IN??????????(SELECT??Sno????????????
6、FROM??Reports???????????WHERE??Cno='C02');例1.42?查詢與“李偉”在同一個(gè)系學(xué)習(xí)的學(xué)生學(xué)號(hào)(Sno)、姓名(Sname)和系名(Sdept)。該查詢可構(gòu)造嵌套查詢實(shí)現(xiàn),其SQL語(yǔ)句如下:SELECT??Sno,?Sname,?SdeptFROM??StudentsWHERE??Sdept??IN?????????(SELECT??Sdept??????????FROM??Students??????????WHERE??Sname=’李偉’);說(shuō)明:本例中的查詢也可以用自
7、身連接來(lái)完成,其SQL語(yǔ)句如下:SELECT??A.Sno?,?A.Sname?,?A.SdeptFROM??Students?A?,?Students?BWHERE??A.Sdept=B.Sdept?AND?B.Sname=’李偉’;例1.43??查詢選修了課程名為“數(shù)據(jù)結(jié)構(gòu)”的學(xué)生學(xué)號(hào)(Sno)和姓名(Sname)。本查詢涉及學(xué)號(hào)、姓名和課程名(Cname)三個(gè)屬性。學(xué)號(hào)和姓名存放在Students表中,課程名的存放在Courses表中,但Students與Courses兩個(gè)表之間沒(méi)有公共屬性,必須通過(guò)Repo
8、rts表建立它們之間的聯(lián)系。所以本查詢實(shí)際上涉及三個(gè)關(guān)系的連接操作。SELECT??Sno,?Sname???????????????????????????FROM??Students?????????????????????????????????WHERE??Sno??IN???????(SELECT??Sno?????????????????????