LuoXinLoves 2020-05-26
(1)左外连接 (左边的表不加限制), 使用关键词 left [outer] join 表示,查询结果为左侧表全量数据输出,右侧表进行匹配输出,未匹配到的数据为空。(2)右外连接(右边的表不加限制), 使用关键词 rigth [outer] join 表示,查询结果为右侧表全量数据输出,左侧表进行匹配输出,未匹配到的数据为空。(3)全外连接(左右两表都不加限制), 使用关键词 full [outer] join 表示,查询结果为左右两侧表全量输出, 无法匹配的数据,也全部输出。
另外一种左右外连接的表示法为:(+)
当(+) 在"="左侧时,代表以右侧为全量输出,即为右外连接
当(+) 在"="右侧时,代表以左侧为全量输出,即为左外连接
总结一句话时,就是(+)在哪一侧,对应的表输出的未匹配到的数据为空,即为反方面的外连接。
使用(+)有以下限制: 1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
3.(+)操作符只适用于列,而不能用在表达式上。4.(+)操作符不能与or和in操作符一起使用。5.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
------–— 测试部分 ------–—– 生成数据create table ta(id number,name varchar2(10));create table tb(id number,name varchar2(10));
–相同数据insert into ta values(1,‘ha‘);insert into ta values(2,‘ha‘);insert into ta values(3,‘ha‘);insert into tb values(1,‘ha‘);insert into tb values(2,‘ha‘);insert into tb values(3,‘ha‘);– 不同数据insert into ta values(4,‘h4‘);insert into tb values(5,‘h5‘);insert into ta values(6,‘h6‘);insert into tb values(7,‘h7‘);commit;
– 测试(+)
select *from ta,tbwhere ta.id=tb.id(+);
select *from ta,tbwhere ta.id(+)=tb.idand ta.id is null; – 注释掉该查看结果。
– 测试关键词
select *from ta,tbwhere ta.id left join tb.idon ta.id = tb.id;
select *from ta,tbwhere ta.id right join tb.idon ta.id = tb.id;
select * from ta full join tbon ta.id = tb.id;-----–— 测试完成 --------------–—