【Oracle】--連線查詢

ZeroWM發表於2016-05-17

為什麼使用連線?
  分解資料為多個表,能避免過多的資料冗餘,這樣可以讓資料庫具有更大的伸縮性。但是表數量的增多,多於多表查詢怎麼解決呢?答案就是:連線。


什麼是內連線、自連線、外連線?  

這裡寫圖片描述
          表1-custominfo

這裡寫圖片描述
          表2-orderinfo

內連線
也稱為簡單連線,它會把兩個或多個表進行連線,只能查詢出匹配記錄,不匹配的記錄將無法查詢出來。
常用的兩種連線方式:

1)等值
連線條件中使用“=”(等號)連線兩個條件列表。
下面的這兩種查詢方式,結果一樣~
①SELECT * FROM CUSTOMINFO c ,ORDERINFO d WHERE c.CID=d.CUSTOMID
②SELECT * FROM CUSTOMINFO c INNER JOIN ORDERINFO d ON c.CID=d.CUSTOMID
這裡寫圖片描述

2)不等值
連線條件中使用“>”、”>=”、”<=”、”<”、”!=”、”<>”、”BETWEEN…AND…”、”IN”等連線兩個條件列表,但是這種方式通常需要和其他等值運算一起使用,否則檢索出來的資料可能沒有實際意義。
①SELECT * FROM CUSTOMINFO c ,ORDERINFO d WHERE c.CID IN d.CUSTOMID
②SELECT * FROM CUSTOMINFO c INNER JOIN ORDERINFO d ON d.CUSTOMID IN c.CID
這裡寫圖片描述
內連線中,關鍵字“INNER JOIN”可以直接寫成“JOIN”,系統會把“JOIN”識別成內連線。但是“ON”關鍵字不能省略。

自連線
把自身表的一個引用作為另一個表來處理,獲取特殊資料。

外連線
1)左外連線
返回結果符合連線條件的行記錄,還包含左邊表中的全部記錄。
①SELECT * FROM CUSTOMINFO c LEFT JOIN ORDERINFO D ON D .CUSTOMID = c.CID
這裡寫圖片描述

2)右外連線
同左外連線。

3)全外連線
返回所有匹配成功的記錄,並返回左表未匹配成功的記錄,也返回右表未匹配成功的記錄。
①SELECT * FROM CUSTOMINFO c FULL JOIN ORDERINFO D ON D .CUSTOMID = c.CID
這裡寫圖片描述


連線查詢需要注意什麼?
1)SELECT * FROM A ,B得到的結果是A*B條資料。
2)A左連線B A.ID=B.ID,B左連線C B.ID=C.ID ,不要擔心B.ID是否存在,即使它不存在,也能關聯C表,只不過關聯的那部分欄位資料為null.
3)Oracle大小寫敏感,不要寫錯了欄位,關鍵字還是可以寫成小寫的。
4)多表級聯查詢很方便,但是很可能會影響查詢效率,這就要看開啟、關閉資料庫跟關聯表哪個用的時間久了。

相關文章