SQL的四種連線(內連線,外連線)
阿新 • • 發佈:2019-02-01
一,內連線(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區別在於是否剔除重複的查詢資料