oracle连接知识
内连接暂不叙述,直接开讲外连接
外连接包括:
-
左外连接(左边的表不加限制,即右边的表是匹配表),
-
右外连接(右边的表不加限制,即左边的表是匹配表),
-
全外连接(左右两边都不限制)。
对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项: -
(+)操作符只能出现在WHERE子句中,并且不能与OUTER JOIN语法同时使用。
-
当使用(+)操作符执行外连接时,如果在WHERE子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。
-
(+)操作符只适用于列,而不能用在表达式上。
-
(+)操作符不能与OR和IN操作符一起使用。
-
(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
-
对于左连接,(+)一般写在右表的后面如:
select * from A a,B b where a.id = b.id(+);
全外连接不支持(+)写法
示例:
还是先建两个表吧:
create table A(
id int;
namea varchar;
)
create table B(
id int;
nameb varchar;
)
insert into A(id,namea)select 1,tom from dual;
insert into A(id,namea)select 2,tim from dual;
insert into A(id,namea)select 3,tamp from dual;
insert into A(id,nameb)select 1,com from dual;
insert into A(id,nameb)select 2,cim from dual;
insert into A(id,nameb)select 3,camp from dual;
此时表A:
| id | namea |
|---|---|
| 1 | tom |
| 2 | tim |
| 3 | tamp |
此时表B:
| id | nameb |
|---|---|
| 1 | com |
| 2 | cim |
左外连接:
left join :
select * from A a left join B b on a.id = b.id;
(+):
select * from A a, B b where a.id = b.id(+);
| id | namea | id | nameb |
|---|---|---|---|
| 1 | tom | 1 | com |
| 2 | tim | 2 | cim |
| 3 | tamp | null |
用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。如果加号写在左表,右表就是全部显示,所以是右连接。
右外连接:
right join :
select * from A a right join B b on a.id = b.id;
(+):
select * from A a, B b where a.id(+) = b.id;
| id | namea | id | nameb |
|---|---|---|---|
| 1 | tom | 1 | com |
| 2 | tim | 2 | cim |
全外连接:
左右两表都不做限制,所有记录全部显示:
right join :
select * from A a full join B b on a.id = b.id;
| id | namea | id | nameb |
|---|---|---|---|
| 1 | tom | 1 | com |
| 2 | tim | 2 | cim |
| 3 | tamp | null |

浙公网安备 33010602011771号