left join 和 left outer join 的區別


老是混淆,做個筆記,轉自:https://www.cnblogs.com/xieqian111/p/5735977.html

left join 和 left outer join 的區別
通俗的講:  
  A   left   join   B   的連接的記錄數與A表的記錄數同  
  A   right   join   B   的連接的記錄數與B表的記錄數同    
  A   left   join   B   等價B   right   join   A  
   
   
  table   A:  
Field_K,   Field_A  
  1                       a  
  3                       b  
  4                       c  
   
  table   B:  
  Field_K,   Field_B  
  1                       x  
  2                       y  
  4                       z  
   
  select   a.Field_K,   a.Field_A,   b.Field_K,   b.Field_B  
  from   a   left   join   b   on   a.Field_K=b.Field_K  
   
  Field_K         Field_A         Field_K         Field_B          
  ----------   ----------   ----------   ----------    
  1                     a                     1                     x                    
  3                     b                     NULL               NULL  
  4                     c                     4                     z                    
   
  select   a.Field_K,   a.Field_A,   b.Field_K,   b.Field_B  
  from   a   right   join   b   on   a.Field_K=b.Field_K  
   
  Field_K         Field_A         Field_K         Field_B          
  ----------   ----------   ----------   ----------    
  1                     a                     1                     x                    
  NULL               NULL               2                     y                    
  4                     c                     4                     z       --

舉個例子:  
  假設a表和b表的數據是這樣的。  
  a                         b    
  id     name  id     stock   
  1  a             1         15  
  2         b             2         50  
  3         c                  
   
  select   *   from   a   inner   join   b   on   a.id=b.id  
  這個語法是連接查詢中的內連接,它產生的結果是  
  兩個表相匹配的記錄出現在結果列表中。  
  根據上面的表,出現的結果是這樣的  
  a.id     name     b.id     stock  
  1       a             1         15  
  2             b             2         50  
  ----------------------------  
  select   *   from   a,b   where   a.id=b.id  
  這個語法是內連接的另外一種寫法,其執行結果與inner   join   一樣  
   
  --------------------------------    
   
  select   *   from   a   left/right   join   b   on   a.id=b.id  
  這個是外連接語法中的左外連接或右外連接  
  如果是左外連接的話,它將顯示a表的所有記錄,  
  select   a.*,b.*   from   a   left   join   b   on   a.id=b.id  
  查詢的結果是這樣的:  
  a.id     name     b.id     stock  
  1         a         1             15  
  2               b         2             50  
  3               c       null         null   
  --------------------------------------------  
  如果是右外連接的話,它將顯示b表的所有記錄,  
  select   a.*,b.*   from   a   right   join   b   on   a.id=b.id  
  查詢的結果是這樣的:  
  a.id     name     b.id     stock  
  1         a         1             15  
  2               b         2             50   

--

select   a.*,b.*   from   a   left   join   b   on   a.k   =   b.k    
  select   a.*,b.*   from   a   left   outer   join   b   on   a.k   =b.k  
  ----------上面兩種一樣left   join是left   outer   join的簡寫  
  select   a.*,b.*   from   a   left   inner   join   b   on   a.k   =   b.k    
  沒有這種寫法,錯誤的語句.

--

在你要使用多個left   join的時候  
  比如說10個  
  我們把10個全都寫成left   join的形式  
  然后再SQL讓他自動運行一下,它會把最后一次出現的left   join變成left   outer   join  
  所以依此推理,最后一個left   join會以left   outer   join的形式存在  
  當然,不管變不變對結果的顯示沒有任何影響  
  希望我的實驗能對你有所幫助   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM