SQL連接查詢總結

參考:http://lavasoft.blog.51cto.com/62575/38929

1,用途:通過表之間的聯繫,從多個表中獲取感興趣的字段

2,分類:交叉鏈接、內連接、外連接

3,詳細情況:

(1)交叉鏈接(cross join)有顯式和隱式之分,無on子句,返回兩表笛卡爾積的數據行

(1.1)隱式(無cross join關鍵字)示例:

SELECT O.ID, O.ORDER_NUMBER, C.ID, C.NAME
FROM ORDERS O , CUSTOMERS C
WHERE O.ID=1;

(1.2)顯式(有cross join關鍵字)示例:

       SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME
       FROM ORDERS O CROSS JOIN CUSTOMERS C
 WHERE O.ID=1;
(2)內連接(inner join)有顯示和隱式之分,含on子句,用鏈接條件形成中間表,用where子句過濾中間表形成最終結果
(2.1)隱式(無inner join和on關鍵字)示例,中間表爲兩表笛卡爾積:
SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME
FROM CUSTOMERS C,ORDERS O
WHERE C.ID=O.CUSTOMER_ID;
(2.2)顯示(有inner join和on關鍵)示例,中間表爲用on條件過濾過的笛卡爾積:
SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME
FROM CUSTOMERS C
INNER JOIN ORDERS O ON C.ID=O.CUSTOMER_ID;
(3)外連接(outer join)有left outer join、right …… 和all …… 之分,中間表中不僅包含符合on條件的數據行也包括其他的一些數據,left連接中包括左表中的全部數據,對於右表中不存在的屬性列則用null補齊;right連接與left連接對稱;all連接相當於left連接和right連接的並。
4,查詢過程:
(1)單表查詢:根據WHERE條件過濾表中的記錄,形成中間表(這個中間表對用戶是不可見的);然後根據SELECT的選擇列選擇相應的列進行返回最終結果。
(2)兩表連接查詢:對兩表求積(笛卡爾積)並用ON條件和連接連接類型進行過濾形成中間表;然後根據WHERE條件過濾中間表的記錄,並根據SELECT指定的列返回查詢結果。
(3)多表連接查詢:先對第一個和第二個表按照兩表連接做查詢,然後用查詢結果和第三個表做連接查詢,以此類推,直到所有的表都連接上爲止,最終形成一箇中間的結果表,然後根據WHERE條件過濾中間表的記錄,並根據SELECT指定的列返回查詢結果。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章