參考:http://www.cuiyongjian.com/post-130.html



在oracle的SQL語句常用的連接有內連接(inner join),外連接(outer join)等,內連接又包括等值連接,非等值連接,自連接;而外連接又分為左連接和右連接。其中默認的是內連接的等值連接。



 為了方便我們創建兩張最簡易的表A、B,具體的表結構參看下面,來分析內連接與外連接的區別

         

sql 外聯POSTGRESSQL庫_內連接

                     

                 圖1                                         

sql 外聯POSTGRESSQL庫_#數據庫_02

                            

              圖2

兩個表要做連接,必須要有連接字段,而在表A和表B中連接字段是Aid和Bnamid,下圖説明了連接之間關係圖3

 

                    

sql 外聯POSTGRESSQL庫_sql 外聯POSTGRESSQL庫_03

                                             

                                               圖3

    (1) 內連接:利用內連接(等值)就可獲取藍色的公共部分C,即圖3中的數據集C,結果集為如下:

   

         

sql 外聯POSTGRESSQL庫_#數據庫_04

   

                                          圖4

   其實select * from A join B on A.Aid=B.Bnamid;等價於select * from A,B where A.Aid=B.Bnamid;
       注:非等值連接主要的話是針對一個範圍來查詢數據,自連接主要就是把1張表堪稱兩張表來用                        
   (2)外連接:分為左外連接(left join)與右外連接(right join)
      
      左外連接即公共顯示的藍色部分C1+顯示黃色的記錄集A1,顯示語句等價於select * from A,B where A.Aid=B.Bnamid(+);       

           

sql 外聯POSTGRESSQL庫_#數據庫_05

                                                                   

                                    圖  5

右外連接即公共顯示的藍色部分C1+顯示綠色的B1,顯示語句等價於select * from A,B where A.Aid(+)=B.Bnamid;

          

sql 外聯POSTGRESSQL庫_等值連接_06

                                    

                                          圖6

  表A和表B情況是相對的,以上實驗都是A在左邊的情況,其實A left join B與B right join A的情況的結果集是一樣的。