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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/795108/viewspace-997831/