cpdlx 发表于 2013-1-26 14:32:11

SQL的内连接与外连接

SQL的内连接与外连接

转(本文来自CSDN博客,http://blog.csdn.net/hellowheat/archive/2009/05/21/4207467.aspx) 
 
    在oracle的SQL语句常用的连接有内连接(inner join),外连接(outer join)等,内连接又包括等值连接,非等值连接,自连接;而外连接又分为左连接和右连接。其中默认的是内连接的等值连接。
     为了方便我们创建两张最简易的表A、B,具体的表结构参看下面,来分析内连接与外连接的区别
          http://mose.iteye.com/upload/attachment/123738/9557693b-ad29-390b-9089-cd22ab9e9b17.bmp          http://mose.iteye.com/upload/attachment/123740/6c4abec5-0ba1-36b8-b736-8098f51662c0.bmp
                                  图1                                                                      图2
两个表要做连接,必须要有连接字段,而在表A和表B中连接字段是Aid和Bnamid,下图说明了连接之间关系图3
        http://mose.iteye.com/upload/attachment/123743/a7a72718-366e-31c2-a0db-41bf31713f04.bmp
                                                                  图3
    (1) 内连接:利用内连接(等值)就可获取蓝色的公共部分C,即图3中的数据集C,结果集为如下:
 
        http://mose.iteye.com/upload/attachment/123742/cf76963a-80c9-3bee-9df1-e80a8fee2e64.bmp
 
                                                                   图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(+);       
            http://mose.iteye.com/upload/attachment/123745/fb5fcc19-f576-3eb6-ba6e-6571f6e81d6f.bmp
                                                                    图  5
右外连接即公共显示的蓝色部分C1+显示绿色的B1,显示语句等价于select * from A,B where A.Aid(+)=B.Bnamid;
           http://mose.iteye.com/upload/attachment/123748/e7f3adf0-6bb6-37f4-a9c1-e1228f934b1f.bmp
                                                                      图6
  表A和表B情况是相对的,以上实验都是A在左边的情况,其实A left join B与B right join A的情况的结果集是一样的。
页: [1]
查看完整版本: SQL的内连接与外连接