oracle 的外聯接、交叉連接:oracle
內連接(inner join )。
外聯接:全連接(full join )、左連接(left join )、右連接(right join )。
交叉聯接(cross join )。
外聯接與內聯接不一樣外連接返回到查詢結果中的不僅包含符合條件的行,還包括左表(左外連接),右表(右外連接)或者兩個連接表(全外連接)中的所有不符合條件的數據行。
1.左聯接 (left [outer] join)
左外聯結就是將左表的所有數據分別於右表的每條數據進行連接組合,返回的結果除內連接的數據外,還有左表中不符合條件的數據,並在右表的相應列中填上null值。
SQL語句如下:
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;
等價語句:
select o.id,o.order_number,o.customer_id,c.id,c.name from orders o,customers c where o.id=c.id(+);
2.右聯接 (right [outer] join)
右外聯結就是將右表中的所有數據分別與左表的每條數據進行連接組合,返回的結果除了內連接的數據外,還有右表中不符合條件的數據,並在左表相應的列中填上null值。
SQL語句如下:
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;
等價語句:
select o.id,o.order_number,o.customer_id,c.id,c.name from orders o,customers c where c.id(+)=o.id;
3.全外聯接 (full [outer] join)
全外聯接就是將左表的所有數據分別與右表的每條數據進行連接組合,返回的結果除了內連接的數據外,還有兩個表中不符合條件的數據,並在左表或者右表的相應列中填上null值。
SQL語句如下:
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;
4.交叉連接(cross join)
交叉連接不帶WHERE 子句,它返回被連接的兩個表所有數據行的笛卡爾積,返回到結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。
SQL語句如下:
select o.id,o.order_number,o.customer_id,c.id,c.name from orders o, customers c
我們把select查出來的表當做左表join後的當做右表在 on的後面加條件
在orcal中(+)在等號左邊的我們叫右連接,(+)在右邊的我們叫左連接