论坛首页 综合技术论坛

Oracle左右全连接总结

浏览 4602 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-04   最后修改:2009-09-08
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    
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics