1. 程式人生 > >SQL的四種連線(內連線,外連線)

SQL的四種連線(內連線,外連線)

一,內連線(inner join)

內連線(INNER JOIN):分顯式的和隱式的,返回連線表中符合連線條件和查詢條件的資料行。(所謂的連線表就是資料庫在做查詢形成的中間表)。

1.隱式的內連線
沒有INNER JOIN,形成的中間表為兩個表的笛卡爾積。

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

2.顯示的內連線
一般稱為內連線,有INNER JOIN,形成的中間表為兩個表經過ON條件過濾後的笛卡爾積。

SELECT O.ID,O.ORDER_NUMBER,C
.ID,C.NAME FROM CUSTOMERS C INNER JOIN ORDERS O ON C.ID=O.CUSTOMER_ID;

二,外連線(左外,右外,全外)

外連不但返回符合連線和查詢條件的資料行,還返回不符合條件的一些行。

1.左外連線(left outer join)

左向外聯接的結果集包括 LEFT OUTER子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O
LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;

2.右外連線(right outer join)

右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;

3.全外連線(full outer join)

完整外部聯接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的資料值。
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O FULL OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;

三,聯合查詢(union/union all)

union 操作符用於合併兩個或多個 SELECT 語句的結果集。請注意,union 內部的 select語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select語句中的列的順序必須相同。

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

union 與 unionall區別在於是否剔除重複的查詢資料