Oracle 左外連線、右外連線、全外連線小總結

531968912發表於2016-08-10
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部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2123257/,如需轉載,請註明出處,否則將追究法律責任。

相關文章