ITPub博客

首页 > 数据库 > Oracle > Oracle 左外连接、右外连接、全外连接小总结

Oracle 左外连接、右外连接、全外连接小总结

原创 Oracle 作者:531968912 时间:2016-08-10 10:49:36 0 删除 编辑
Oracle 左外连接、右外连接、全外连接小总结:
   1.左外连接:
      left outer join 或者 left join
      左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:
      SELECT *
      FROM TESTA 
      LEFT OUTER JOIN TESTB 
      ON TESTA.A=TESTB.A
      Oracle 支持另一种写法
      SELECT * 
      FROM TESTA,TESTB
      WHERE TESTA.A=TESTB.A(+)
      
      此sql获取的结果集为:TESTA.a与TESTB.a相等的数据加上TESTA表中 TESTA.a与TESTB.a两个字段不匹配的数据;
      
      用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。
      所以加号写在右表,左表就是全部显示,故是左连接。
      
   2.右外连接:
    right outer join 或者 right join                    
    右外连接是在等值连接的基础上加上被连接表的不匹配数据  
    SELECT *                                            
    FROM TESTA                                          
    RIGHT OUTER JOIN TESTB                              
    ON TESTA.A=TESTB.A                                  
                                                    
    Oracle支持的另一种写法                              
    SELECT *                                            
    FROM TESTA,TESTB                                    
    WHERE TESTA.A(+)=TESTB.A            
     
       此sql获取的结果集为:TESTA.a与TESTB.a相等的数据加上TESTB表中 TESTA.a与TESTB.a两个字段不匹配的数据;
       
    用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。
    所以加号写在左表,右表就是全部显示,故是右连接。
   
   3.全外连接:
    full outer join 或者 full join                                               
   全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上
   SELECT *                                                  
   FROM TESTA                                                
   FULL OUTER JOIN TESTB                                     
   ON TESTA.A=TESTB.A                                        
   全外连接的等价写法,对同一表先做左连接,然后右连接        
   SELECT  TESTA.*,TESTB.*                                   
   FROM TESTA                                                
   LEFT OUTER JOIN TESTB                                     
   ON TESTA.A=TESTB.A                                        
   UNION                                                     
   SELECT TESTA.*,TESTB.*                                    
   FROM TESTB                                                
   LEFT OUTER JOIN TESTA                                     
   ON TESTA.A=TESTB.A    
    此sql获取的结果集为:TESTA.a与TESTB.a相匹配的结果和TESTA.a与TESTB.a不匹配的结果   
    
    总结:
      Oracle  外连接                                                  
            (1)左外连接 (左边的表不加限制)        
            (2)右外连接(右边的表不加限制)  
            (3)全外连接(左右两表都不加限制)   
     oracle中使用+注意事项:
        对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项:                                        
               1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。                                
               2. 当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符
               3.(+)操作符只适用于列,而不能用在表达式上。                                                         
               4.(+)操作符不能与or和in操作符一起使用。                                                             
               5.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。  
               6. (+)写在左表,右表就全显示,故是右连接;
               7.(+)写在右边,左边就全显示,故是左连接;                            

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25462274/viewspace-2123257/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-09-24

  • 博文量
    576
  • 访问量
    1111437