转:https://blog.csdn.net/fly_zxy/article/details/53954377
准备工作
oracle连接分为:
- 左外连接:左表不加限制,保留左表的数据,匹配右表,右表没有匹配到的行中的列显示为null。
- 右外连接:右表不加限制,保留右表的数据。匹配左表,左表没有匹配到的行中列显示为null。
- 完全外连接:左右表都不加限制。即右外连接的结果为:左右表匹配的数据+左表没有匹配到的数据+右表没有匹配到的数据。
连接的语法:
- left/right/full outer join …on
- left/right/full join …on
(+)号的作用:+号可以理解为补充的意思,加在那个表的列上就代表这个表的列为补充。加在右表的列上代表右表为补充,为左连接。加在左表的列上代表左表为补充,为右连接。注意:完全外连接中不能使用+号。
创建两种表,生出测试数据:
-
CREATE
TABLE t_A (
-
id
number,
-
name VARCHAR2(
10)
-
);
-
-
CREATE
TABLE t_B (
-
id
number,
-
name VARCHAR2(
10)
-
);
-
-
INSERT
INTO t_A
VALUES(
1,
‘A’);
-
INSERT
INTO t_A
VALUES(
2,
‘B’);
-
INSERT
INTO t_A
VALUES(
3,
‘C’);
-
INSERT
INTO t_A
VALUES(
4,
‘D’);
-
INSERT
INTO t_A
VALUES(
5,
‘E’);
-
-
INSERT
INTO t_B
VALUES(
1,
‘AA’);
-
INSERT
INTO t_B
VALUES(
1,
‘BB’);
-
INSERT
INTO t_B
VALUES(
2,
‘CC’);
-
INSERT
INTO t_B
VALUES(
1,
‘DD’);
-
INSERT
INTO t_B
VALUES(
7,
‘GG’);
-
select *
from t_a a
left
join t_b b
on a.id=b.id;
-
select *
from t_a a,t_b b
where a.id=b.id(+);
右外连接
-
select *
from t_a a
right
join t_b b
on a.id = b.id;
-
select *
from t_a a,t_b b
where a.id(+)=b.id;
完全外连接
select * from t_a a full join t_b b on a.id=b.id;
等值连接(我们在看看等值连接的结果)
-
select *
from t_a a,t_b b
where a.id=b.id;
-
select *
from t_a a
join t_b b
on a.id=b.id;
–等值连接也可以这样写
注意:以前理解等值连接和完全外连接是一回事,现在看来是我理解错了。等值连接是只把满足条件的两个表的行相连,然后显示出来。完全外连接是把匹配查询条件的行、左表没有匹配到的、右表没有匹配到的都显示出来。
</div>
</div>
准备工作
oracle连接分为:
- 左外连接:左表不加限制,保留左表的数据,匹配右表,右表没有匹配到的行中的列显示为null。
- 右外连接:右表不加限制,保留右表的数据。匹配左表,左表没有匹配到的行中列显示为null。
- 完全外连接:左右表都不加限制。即右外连接的结果为:左右表匹配的数据+左表没有匹配到的数据+右表没有匹配到的数据。
连接的语法:
- left/right/full outer join …on
- left/right/full join …on
(+)号的作用:+号可以理解为补充的意思,加在那个表的列上就代表这个表的列为补充。加在右表的列上代表右表为补充,为左连接。加在左表的列上代表左表为补充,为右连接。注意:完全外连接中不能使用+号。
创建两种表,生出测试数据:
-
CREATE
TABLE t_A (
-
id
number,
-
name VARCHAR2(
10)
-
);
-
-
CREATE
TABLE t_B (
-
id
number,
-
name VARCHAR2(
10)
-
);
-
-
INSERT
INTO t_A
VALUES(
1,
‘A’);
-
INSERT
INTO t_A
VALUES(
2,
‘B’);
-
INSERT
INTO t_A
VALUES(
3,
‘C’);
-
INSERT
INTO t_A
VALUES(
4,
‘D’);
-
INSERT
INTO t_A
VALUES(
5,
‘E’);
-
-
INSERT
INTO t_B
VALUES(
1,
‘AA’);
-
INSERT
INTO t_B
VALUES(
1,
‘BB’);
-
INSERT
INTO t_B
VALUES(
2,
‘CC’);
-
INSERT
INTO t_B
VALUES(
1,
‘DD’);
-
INSERT
INTO t_B
VALUES(
7,
‘GG’);
-
select *
from t_a a
left
join t_b b
on a.id=b.id;
-
select *
from t_a a,t_b b
where a.id=b.id(+);
右外连接
-
select *
from t_a a
right
join t_b b
on a.id = b.id;
-
select *
from t_a a,t_b b
where a.id(+)=b.id;
完全外连接
select * from t_a a full join t_b b on a.id=b.id;
等值连接(我们在看看等值连接的结果)
-
select *
from t_a a,t_b b
where a.id=b.id;
-
select *
from t_a a
join t_b b
on a.id=b.id;
–等值连接也可以这样写
注意:以前理解等值连接和完全外连接是一回事,现在看来是我理解错了。等值连接是只把满足条件的两个表的行相连,然后显示出来。完全外连接是把匹配查询条件的行、左表没有匹配到的、右表没有匹配到的都显示出来。
</div>
</div>