一,內連接(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區別在於是否剔除重復的查詢數據