日期:2014-05-16  浏览次数:20673 次

数据库左右连接

?

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