資源描述:
《Sql_Lab2 連接查詢和嵌套查詢》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第一部分:SQL實(shí)驗(yàn)二SQL實(shí)驗(yàn)二連接查詢和嵌套查詢實(shí)驗(yàn)?zāi)繕?biāo):?掌握基本的連接查詢操作?等值連接?非等值連接?自身連接?外連接?掌握嵌套查詢操作?帶有比較運(yùn)算符的子查詢?帶有IN謂詞的子查詢?帶有ANY或ALL謂詞的子查詢?帶有EXISTS謂詞的子查詢2.1連接實(shí)驗(yàn)一的查詢都只涉及了一個(gè)表,但由于存放在數(shù)據(jù)庫(kù)中的各個(gè)表不是孤立的,而是相互聯(lián)系的,因此,有時(shí)我們會(huì)對(duì)多個(gè)表中的數(shù)據(jù)同時(shí)進(jìn)行查詢以組成一個(gè)綜合性的結(jié)果集,這樣的查詢稱為連接查詢。連接查詢主要包括:?等值連接?非等值連接?自身連接?外連接下面詳細(xì)介紹各種連接查詢類型。1.等值連接以等
2、于運(yùn)算符(=)為基礎(chǔ)的連接稱為等值連接。通常情況下,所有連接都是等值連接。等值連接的語(yǔ)法如下:SELECTFROMWHEREtable1.common_column=table2.common_columnANDtable3.common_column=tablen.common_column;實(shí)驗(yàn)2-1查詢所有產(chǎn)品的名稱、類別名稱和庫(kù)存量等數(shù)據(jù)。實(shí)驗(yàn)2,第1頁(yè)第一部分:SQL實(shí)驗(yàn)二實(shí)驗(yàn)2-2查詢所有訂單的訂單代號(hào)、客戶公司名稱和運(yùn)貨費(fèi),查詢結(jié)果按訂單代號(hào)的升序排列。實(shí)驗(yàn)2,第2頁(yè)第一
3、部分:SQL實(shí)驗(yàn)二實(shí)驗(yàn)2-3查詢由北京客戶訂購(gòu)的運(yùn)貨費(fèi)等于于8元的訂單的訂單代號(hào)、客戶公司名稱和運(yùn)貨費(fèi)。等值連接可在兩個(gè)表上執(zhí)行,也可在多個(gè)表上執(zhí)行。下面看看如何在一個(gè)連接中使用四個(gè)表。實(shí)驗(yàn)2-4查詢每一客戶的客戶代號(hào)、公司名稱及其訂單的訂單代號(hào)、訂購(gòu)日期、產(chǎn)品名稱和數(shù)量等數(shù)據(jù)。本例查詢中的客戶代號(hào)、公司名稱來(lái)自于Customer表,訂單代號(hào)、訂購(gòu)日期來(lái)自于Orders表,產(chǎn)品名稱來(lái)自于Product表,而數(shù)量來(lái)自于Order_items表。用SELECT語(yǔ)句表示如下:SELECTCustomer.Cno,Company,Orders.On
4、o,Order_date,Pname,QtyFROMCustomer,Orders,Order_items,ProductWHERECustomer.Cno=Orders.CnoANDOrders.Ono=Order_items.OnoANDOrder_items.Pno=Product.Pno;請(qǐng)學(xué)生自行觀察查詢結(jié)果。練習(xí)2-1修改實(shí)驗(yàn)2-4中給出的語(yǔ)句并以如下方式給出,然后觀察發(fā)生什么情況。SELECTCno,Company,Ono,Order_date,Pname,QtyFROMCustomer,Orders,Order_items,
5、ProductWHERECustomer.Cno=Orders.CnoANDOrders.Ono=Order_items.OnoANDOrder_items.Pno=Product.Pno;給出上面的選擇語(yǔ)句后,會(huì)出現(xiàn)“Columnambiguouslydefined”(列定義模糊不清)的出錯(cuò)信息。這是因?yàn)椤癘no”存在于兩個(gè)表(即Orders表和Order_items表)之中。我們需要明確指定要從哪個(gè)表選擇Ono。在這種情況下,可以從任何一個(gè)表中選擇Ono。2.非等值連接實(shí)驗(yàn)2,第3頁(yè)第一部分:SQL實(shí)驗(yàn)二實(shí)驗(yàn)2-5查詢所有單價(jià)介于20和
6、35元之間的產(chǎn)品的名稱、類別名稱、單價(jià)和庫(kù)存量等數(shù)據(jù)?;?.自身連接自身連接是連接的另一種形式。在這種情況下,連接是在單個(gè)表上進(jìn)行的,就像它是兩個(gè)獨(dú)立的表。表的每個(gè)行都與其本身組合,并與表的所有行組合。實(shí)驗(yàn)2-6查詢單價(jià)正好相差0.5倍的每一對(duì)產(chǎn)品的名稱及其單價(jià)。實(shí)驗(yàn)2,第4頁(yè)第一部分:SQL實(shí)驗(yàn)二注意:在進(jìn)行表的自身連接時(shí),須在FROM子句中給同一個(gè)表取不同的別名,并在書寫SELECT語(yǔ)句的其它子句時(shí)把這些代表同一表的不同別名看成是具有相同數(shù)據(jù)的“不同表”(讀者在理解自身連接查詢時(shí),可以將它們看成不同的表,但實(shí)際上只有一個(gè)表)。練習(xí)2-2
7、查詢與“DuWei”客戶在同一城市的其他客戶的姓名及其電話。4.外連接前面介紹的查詢都是內(nèi)連接。內(nèi)連接不選擇表中不符合查詢條件的記錄。這些值可通過(guò)外連接獲得,外連接利用運(yùn)算符加號(hào)(+)。語(yǔ)法如下:SELECT(column_names)FROM(tablenames)WHERE(table1.column1=table2.column2)(+);實(shí)驗(yàn)2-7查詢所有客戶的代號(hào)、姓名以及其訂單的代號(hào)和訂購(gòu)日期與訂單狀態(tài),查詢結(jié)果按客戶代號(hào)的升序排列。先請(qǐng)看下面的SQL語(yǔ)句及其查詢結(jié)果:實(shí)驗(yàn)2,第5頁(yè)第一部分:SQL實(shí)驗(yàn)二上面的查詢是一個(gè)內(nèi)連接,
8、由于客戶“C0003”和“C0004”沒(méi)有訂單,他們都不滿足查詢條件,因此他們的信息沒(méi)有出現(xiàn)在查詢結(jié)果中;如果我們想讓這兩個(gè)客戶的信息也出現(xiàn)在查詢結(jié)果中就需要使用下面的外連接語(yǔ)句