資源描述:
《實驗五 連接查詢、嵌套查詢與聯(lián)合查詢 實驗指導(dǎo)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、實驗五連接查詢、嵌套查詢與聯(lián)合查詢實驗指導(dǎo)一、連接查詢前面的查詢都是在單個表中進(jìn)行的查詢。在數(shù)據(jù)庫的實際編程應(yīng)用中,往往需要查詢許多數(shù)據(jù),有可能這些數(shù)據(jù)出現(xiàn)在兩個或兩個以上的表中,而我們希望這些數(shù)據(jù)出現(xiàn)在一個結(jié)果集中,這就要用到連接查詢。在SQLServer中,可以使用兩種語法形式:一種是ANSI連接語法形式,連接寫在FROM子句中,使用JOIN…ON關(guān)鍵字。另一種是早期SQLSERVER連接語法形式,連接寫在WHERE子句中。在SQLSERER中可以設(shè)定兼容級別為80及以下(在對象資源管理器中展開相應(yīng)的數(shù)據(jù)庫,右
2、擊,選擇“屬性”,在彈出的“數(shù)據(jù)庫屬性”對話框中選擇“選項”,有兼容級別設(shè)置)才能使用這種形式。在SQLServer2008中推薦使用ANSI形式的連接。兩種連接的語法格式如下。SQLServer連接的語法格式:SELECT<查詢列表>FROM表1,表2WHERE表1.列1<比較運算符>表2.列2其中比較運算符可以是:=、>、<、>=、<=、<>等。說明:l連接的列(屬性)名可不相同,但數(shù)據(jù)類型必須兼容。l當(dāng)<比較運算符>是“=”時,稱等值連接,否則為非等值連接。ANSI連接的語法形式如下:SELECT表名.列名[
3、,…n]FROM{表名1[連接類型]JOIN表名2ON連接條件}[,…n]WHERE查詢條件連接查詢包括以下幾種類型。1.內(nèi)連接從兩個或兩個以上的表的組合中,挑選出符合連接條件的數(shù)據(jù)。如果數(shù)據(jù)無法滿足連接條件,則將其丟棄。通常稱這種方法為內(nèi)部連接INNERJOIN。在內(nèi)部連接中,參與連接的表的地位是平等的。它有兩種形式:等值連接和自然連接。等值連接會產(chǎn)生冗余列,因為它將連接條件中的共享列顯示兩次。而自然連接則清除了等值連接產(chǎn)生的冗余列,因此我們所說的內(nèi)連接在沒有特殊說明時都指的是自然連接。例1查詢所有學(xué)生的選課信息
4、(包含學(xué)號、姓名、課程編號)。用SQLServer形式進(jìn)行連接:7SELECTstudent.sno,sname,cnoFROMstudent,scWHEREstudent.sno=sc.sno用ANSI形式進(jìn)行連接:SELECTstudent.sno,sname,cnoFROMstudentINNERJOINscONstudent.sno=sc.sno2.外連接在使用內(nèi)連接查詢時,只包含兩表中都滿足連接條件的行,而外連接會把某些不滿足條件的行顯示出來。在外部連接中,參與連接的表有主從之分。以主表的每行數(shù)據(jù)去匹配從
5、表的數(shù)據(jù)列,符合連接條件的數(shù)據(jù)將直接返回到結(jié)果集中。對那些不符合連接條件的列將被填上NULL值后再返回到結(jié)果集中。對BIT類型的列,由于BIT數(shù)據(jù)類型不允許NULL值,因此將會被填上0值再返回到結(jié)果中。外部連接分為左外連接LEFTOUTERJOIN、右外連接RIGHTOUTERJOIN和全連接三種。以主表所在的方向區(qū)分外部連接。(1)左外連接。左外連接指主表在左邊,即在連接兩表時,保留左表中的不匹配行,右表的相應(yīng)行用NULL或0值。例2查詢每個學(xué)生及其選修課程的情況包括沒有選修課程的學(xué)生。SELECTStudent
6、.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudentLEFTOUTERJOINSCON(Student.Sno=SC.Sno)(2)右外連接。右外連接指主表在右邊,即在連接兩表時,保留右表中的不匹配行,左表的相應(yīng)行用NULL或0值。(3)全連接。在連接兩表時,保留兩表中的不匹配行。全連接的語法只有ANSI形式一種,使用FULLOUTERJOIN關(guān)鍵字。全連接生成的結(jié)果記錄集將會很多。一般不大使用,就不舉例了。3.無限制連接也稱為交叉連接,它可能會產(chǎn)生一個龐大的結(jié)果集,因為其
7、中包含了所連接的表中所有行的全部組合。如在某連接中,一個表的記錄數(shù)是5,另一個表的記錄數(shù)是6,那么結(jié)果集就有5*6(30)條記錄。交叉連接在ANSI形式中使用CROSSJOIN關(guān)鍵字。4.自身連接連接除了可以在多個不同的表中進(jìn)行外,也可以在同一個表中進(jìn)行連接,即自身連接。自身連接可以看作一張表的兩個副本之間進(jìn)行的連接。在自連接中,必須為表指定兩個別名,使之在邏輯上成為兩張表。7例3查詢每一門課的間接先修課(即先修課的先修課)。SELECTFIRST.Cno,SECOND.CpnoFROMCourseFIRSTINN
8、ERJOINCourseSECONDONFIRST.Cpno=SECOND.Cno二、嵌套查詢子查詢指在一個外層查詢中包含另一個內(nèi)層查詢,即在一個SELECT語句中的WHERE子句中,包含有另一個SELECT語句,或者將一個SELECT語句作為另一個SELECT語句的新增列。外層的查詢成為主查詢,WHERE子句中包含的SELECT語句被稱為子查詢。一般將子查