越觉得厚重的情绪越荒诞得遥远,越难于去细致地描述,便惊觉语言是多么的苍白无力。我想,这恐怕便是人类音乐与绘画等艺术诞生的起源。
# 测试数据
1 2 3 4 5 6 7 8 9 10 11 12
| create table t_a(id number); create table t_b(id number);
insert into t_a values(1); insert into t_a values(2); insert into t_a values(3);
insert into t_b values(1); insert into t_b values(2); insert into t_b values(4);
commit;
|
# 左外连接
左外连接会显示左边表的所有数据。
1 2 3 4 5 6 7
| select * from t_a left join t_b on t_a.id = t_b.id;
select * from t_a left outer join t_b on t_a.id = t_b.id;
select * from t_a, t_b where t_a.id = t_b.id(+);
|
# 右外连接
右外连接会显示右边表所有数据。
1 2 3 4 5
| select * from t_a right join t_b on t_a.id = t_b.id;
select * from t_a, t_b where t_a.id(+) = t_b.id;
|
# 内连接
1 2 3 4 5
| select * from t_a join t_b on t_a.id = t_b.id;
select * from t_a, t_b where t_a.id=t_b.id;
|
# 全外连接
1 2 3 4 5 6 7
| select * from t_a full join t_b on t_a.id=t_b.id;
select * from t_a, t_b where t_a.id = t_b.id(+) union select * from t_a, t_b where t_a.id(+) = t_b.id;
|
# 完全连接 / 交叉连接 / 笛卡尔积
1 2 3 4
| select * from t_a, t_b;
select * from t_a cross join t_b;
|
| ID |
ID |
| 1 |
1 |
| 1 |
2 |
| 1 |
4 |
| 2 |
1 |
| 2 |
2 |
| 2 |
4 |
| 3 |
1 |
| 3 |
2 |
| 3 |
4 |
# 注意事项
在 ON 条件里应该只写表连接条件,数据筛选放在 WHERE 里。
左外连接不筛选右边数据。
1 2 3 4 5 6 7
| select * from t_a left join t_b on t_a.id = t_b.id;
select * from t_a, t_b where t_a.id = t_b.id(+);
|
左外连接使用 WHERE 筛选右边数据。
1 2 3 4 5 6 7 8 9
| select * from t_a left join t_b on t_a.id = t_b.id where t_b.id = 2;
select * from t_a, t_b where t_a.id = t_b.id(+) and t_b.id = 2;
|
左外连接使用 ON/+ 筛选右边数据。符合 t_b.id = 2 的数据只有一条,但是左外连接需要显示左边所有数据,所以 t_a.id = 1 这条数据对应的右边数据为空。在 ON 条件里应该只写连接条件,数据筛选放在 WHERE 里。
1 2 3 4 5 6 7 8
| select * from t_a left join t_b on t_a.id = t_b.id and t_b.id = 2;
select * from t_a, t_b where t_a.id = t_b.id(+) and t_b.id(+) = 2;
|