您当前的位置:KKBlog > 学无止境 > ORACLE

oracle左右全连接总结 left join, right jion,full join

如题: select * from a,b where 1=1 and a.id = b.id(+);

这个条语句里面 最后的(+) 表示什么意思。

Oracle左右全连接总结 

--建立测试数据  
create table a(id number);  
create table b(id number);  
insert into a values(1);  
insert into a values(2);  
insert into a values(3);  
insert into b values(1);  
insert into b values(2);  
insert into b values(4);  
commit;  
  
--左:  
--主流数据库通用的方法  
select * from a left join b on a.id=b.id;  
--Oracle特有的方法  
select * from a, b where a.id=b.id(+);  
  
        ID         ID  
---------- ----------  
         1          1  
         2          2  
         3   
  
--右:  
--主流数据库通用的方法  
select * from a right join b on a.id=b.id;  
--Oracle特有的方法  
select * from a, b where a.id(+)=b.id;  
  
        ID         ID  
---------- ----------  
         1          1  
         2          2  
                    4  
           
           
--内  
--主流数据库通用的方法  
select * from a join b on a.id=b.id;  
--where关联  
select * from a, b where a.id=b.id;  
  
        ID         ID  
---------- ----------  
         1          1  
         2          2  
           
           
--全外  
--主流数据库通用的方法  
select * from a full join b on a.id=b.id;  
--Oracle特有的方法  
select *  
  from a, b  
where a.id = b.id(+)  
union  
select *   
  from a, b   
where a.id(+) = b.id;  
  
        ID         ID  
---------- ----------  
         1          1  
         2          2  
         3   
                    4  
  
  
--完全,也叫交叉连接或者笛卡尔积  
--主流数据库通用的方法  
select * from a,b;  
--或者  
select * from a cross join b;  
  
        ID         ID  
---------- ----------  
         1          1  
         1          2  
         1          4  
         2          1  
         2          2  
         2          4  
         3          1  
         3          2  
         3          4  
  
  
连接无非是这几个  
--内连接和where相同  
inner join  
--左向外连接,返回左边表所有符合条件的  
left join  
--右向外连接,返回右边表所有符合条件的  
right join  
--完整外部连接,左向外连接和右向外连接的合集  
full join  
--交叉连接,也称笛卡儿积。返回左表中的每一行与右表中所有行的组合  
cross join  
  
  
--补充:  
--左向外连接,返回左边表所有符合条件的,  
--注意这里没有第二个加号,会直接过滤掉数据,只显示符合条件的记录  
select *   
  from a, b  
where a.id = b.id(+)  
   and b.id = 2;  
     
        ID         ID  
---------- ----------  
         2          2     
           
           
--左向外连接,返回左边表所有符合条件的  
--注意where上第二个加号,它的作用是修改右边表记录的显示,例如如果b.id(+) = 2,显示为2,否则显示null  
select *  
  from a, b  
where a.id = b.id(+)  
   and b.id(+) = 2;  
  
        ID         ID  
---------- ----------  
         2          2  
         3   
         1    
 
二维码
意见反馈 二维码