`
huiqinbo
  • 浏览: 334047 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle数据库左右内外连接 【回钦波详解】

 
阅读更多
oracle数据库左右内外连接
2010-04-27 10:25

--建立测试数据     
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        
--建立测试数据     
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