外連線(outer join)示例
SQL> select * from items;
PROD_ID PRODUCT_NAME PRICE
------- ------------ ------------
1 modem 2000.00
2 cpu 25000.00
3 cable 500.00
4 monitor 15000.00
5 keyboard 1000.00
6 pins 2000.00
7 soundcard 3000.00
8 lancard 1500.00
SQL> select * from orders;
ORDER_ID PROD_ID AMOUNT
-------- ------- ------
200 2 5000
215 3 4000
256 5 5000
265 5 1000
276 4 45000
212 1 6000
245 6 10000
249 5 2000
250 9 1000
自然連線(natural join) :
SQL> select * from items natural join orders;
PROD_ID PRODUCT_NAME PRICE ORDER_ID AMOUNT
------- ------------ ------------ -------- ------
1 modem 2000.00 212 6000
2 cpu 25000.00 200 5000
3 cable 500.00 215 4000
4 monitor 15000.00 276 45000
5 keyboard 1000.00 256 5000
5 keyboard 1000.00 265 1000
5 keyboard 1000.00 249 2000
6 pins 2000.00 245 10000
自然連線基於兩個表中相同的列prod_id返回該列值匹配的行。
上例中prod_id=7,8,9的記錄沒有返回。
完全外連線(full outer join) :
SQL> select i.prod_id,i.product_name,o.order_id,o.amount from items i full outer join orders o on i.prod_id=o.prod_id;
PROD_ID PRODUCT_NAME ORDER_ID AMOUNT
---------- ------------ ---------- ----------
2 cpu 200 5000
3 cable 215 4000
5 keyboard 256 5000
5 keyboard 265 1000
4 monitor 276 45000
1 modem 212 6000
6 pins 245 10000
5 keyboard 249 2000
8 lancard
7 soundcard
250 1000
完全外連線返回兩個表中基於相同的列的值相同或不同的所有記錄.
左外連線left (outer join) :
SQL> select i.prod_id,i.product_name,o.order_id,o.amount from items i left outer join orders o on i.prod_id=o.prod_id;
PROD_ID PRODUCT_NAME ORDER_ID AMOUNT
------- ------------ -------- ------
2 cpu 200 5000
3 cable 215 4000
5 keyboard 256 5000
5 keyboard 265 1000
4 monitor 276 45000
1 modem 212 6000
6 pins 245 10000
5 keyboard 249 2000
8 lancard
7 soundcard
左外連線返回join左邊表的所有列和右邊表中與左邊表匹配的列.
右外連線(right outer join) :
SQL> select i.prod_id,i.product_name,o.order_id,o.amount from items i right outer join orders o on i.prod_id=o.prod_id;
PROD_ID PRODUCT_NAME ORDER_ID AMOUNT
------- ------------ -------- ------
1 modem 212 6000
2 cpu 200 5000
3 cable 215 4000
4 monitor 276 45000
5 keyboard 249 2000
5 keyboard 265 1000
5 keyboard 256 5000
6 pins 245 10000
250 1000
SQL> select i.prod_id,i.product_name,o.order_id,o.amount from orders o left outer join items i on i.prod_id=o.prod_id;
PROD_ID PRODUCT_NAME ORDER_ID AMOUNT
------- ------------ -------- ------
1 modem 212 6000
2 cpu 200 5000
3 cable 215 4000
4 monitor 276 45000
5 keyboard 249 2000
5 keyboard 265 1000
5 keyboard 256 5000
6 pins 245 10000
250 1000
如上所示右外連線和左外連線作用相同.在這兩種外連線中改變任一種外連線的表的位置就可以得到與另一種外連線相同的結果.
左或右外連線也可用(+)表示,如下:
SQL> select i.prod_id,i.product_name,o.order_id,o.amount from items i ,orders o where i.prod_id=o.prod_id(+);
PROD_ID PRODUCT_NAME ORDER_ID AMOUNT
------- ------------ -------- ------
1 modem 212 6000
2 cpu 200 5000
3 cable 215 4000
4 monitor 276 45000
5 keyboard 256 5000
5 keyboard 265 1000
5 keyboard 249 2000
6 pins 245 10000
7 soundcard
8 lancard
上例相當於基於items表的左外連線,在關聯條件中(+)在另一個表(orders)的一側;
SQL> select i.prod_id,i.product_name,o.order_id,o.amount from items i ,orders o where i.prod_id(+)=o.prod_id;
PROD_ID PRODUCT_NAME ORDER_ID AMOUNT
------- ------------ -------- ------
1 modem 212 6000
2 cpu 200 5000
3 cable 215 4000
4 monitor 276 45000
5 keyboard 256 5000
5 keyboard 265 1000
5 keyboard 249 2000
6 pins 245 10000
250 1000
上例相當於基於orders表的左外連線,在關聯條件中(+)在另一個表(items)的一側;
但(+)不能同時出現在兩側。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/795108/viewspace-997831/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【FULL OUTER JOIN】全外連線的union all改寫方法
- Oracle 內外連線 join 總結Oracle
- mysql INNER JOIN、LEFT JOIN、RIGHT JOIN;內連線(等值連線)、左連線、右連線MySql
- join、inner join、left join、right join、outer join的區別
- 【原】Oracle中Left Outer Join和外關聯(+)的區別Oracle
- Oracle(+)連線與Join連線Oracle
- Inner Join, Left Outer Join和Association的區別
- LEFT JOIN 和JOIN 多表連線
- MySQL join連表查詢示例MySql
- 【SQL】13 SQL 別名、SQL 連線(JOIN)、SQL INNER JOIN 關鍵字、SQL LEFT JOIN 關鍵字、SQL RIGHT JOIN 關鍵字、SQL FULL OUTER JSQL
- outer join新舊語法分析語法分析
- sql和hql中join語句區別,以及hibernate中內連線,迫切內連線,左外連線,迫切左外連線,右外連線的區別(合集)...SQL
- ZT:簡單介紹join,outer-join,semi-join,anti-join的區別
- 連線查詢簡析 join 、 left join 、 right join
- Oracle內連線、外連線、右外連線、全外連線小總結Oracle
- 【SQL】Oracle的內連線、左外連線、右外連線及全外連線SQLOracle
- Oracle左外連線、右外連線、完全外連線以及(+)號用法Oracle
- Oracle 左外連線、右外連線、全外連線小總結Oracle
- 內連線、外連線
- Hibernate連線查詢join
- Oracle 的 hash join連線方式Oracle
- Oracle表連線操作——Hash Join(雜湊連線)下Oracle
- Oracle表連線操作——Hash Join(雜湊連線)上Oracle
- SQL的四種連線:內連線 左外連線 右外連線 全連線SQL
- 使用Partitioned Outer Join實現稠化報表
- Oracle資料庫聯接(inner join ,outer join)和NOT IN的特殊情況Oracle資料庫
- 【sql調優之執行計劃】nested loops join and nested loop join outerSQLOOP
- Oracle 連線因式分解(Join Factorization)Oracle
- 聊聊CBO的連線排列(Join Permutation)
- 深入理解SQL的四種連線-左外連線、右外連線、內連線、全連線SQL
- MySql的join(連線)查詢 (三表 left join 寫法)MySql
- sql 內連線和外連線SQL
- 外連線與連線順序
- 內連線、外連線總結
- SQL SERVER 自連線、外連線SQLServer
- Oracle表連線操作——Merge Sort Join(合併排序連線)Oracle排序
- Python 連線 Oracle 示例PythonOracle
- oracle外連線Oracle