sql中的内连接、左连接、右连接、全连接

表A:

       
 AID ANAME                BID
---- -------------------- ----------
   1   a1                            2
   2   a2                            3
   3   a3                            4
   4   a4                            5

 

表B:

  BID BNAME
----- -----
    2    b1
    3    b2
    6    b5
    7    b9
    8    b9     

 

 1、内连接仅选出两张表中相互匹配的记录;

  select a.*,b.* from A join b on a.bid=b.bid;或者 select a.*,b.* from A,b where a.bid=b.bid;

 

查询结果:结果行数等于两表bid相同记录数

  AID ANAME               BID      BID BNAME
---- -------------------- ---------- ---------- -----
   1 a1                            2          2     b1
   2 a2                            3          3     b2 

      
2、左连接包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
select a.*,b.* from a left join b on a.bid=b.bid;或select a.*,b.* from a,b where a.bid=b.bid(+);


 查询结果:结果行数等于左边表的记录数

 AID ANAME                 BID      BID BNAME
---- -------------------- ---------- ---------- ------
   1  a1                            2          2     b1
   2  a2                            3          3     b2
   4  a4                            5
   3  a3                            4

 

3、右连接包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。
select a.*,b.* from a right join b on a.bid=b.bid;或select a.*,b.* from a,b where a.bid(+)=b.bid;

 

查询结果:结果行数等于右边表的记录数
 AID      ANAME                 BID        BID   BNAME
---- -------------------- ---------- ---------- -----
   1       a1                              2            2      b1
   2       a2                              3            3      b2
                                                             6      b5
                                                             7      b9
                                                             8      b9

 

4、全连接左右表中所有记录都会选出来。

 select a.*,b.* from a full outer join b on a.bid= b.bid;

 

查询结果:结果行数等于a表记录数+b表记录数-内连接结果行数
 AID ANAME        BID        BID BNAME
---- -------------------- ---------- ---------- ------
   1 a1                     2          2     b1
   2 a2                     3          3     b2
   4 a4                     5
   3 a3                     4
                                           6     b5
                                           7     b9
                                           8     b9

 

  
      数据库中的空值(NULL)。
  有时表中,更确切的说是某些字段值,可能会出现空值, 这是因为这个数据不知道是什么值或根本就不存在。
  空值不等同于字符串中的空格,也不是数字类型的0。因此,判断某个字段值是否为空值时不能使用=,<>这些判断符。必需有专用的短语:IS NULL 来选出有空值字段的记录,同理,可用 IS NOT NULL 选出不包含空值的记录。

 

问题:当有多个表之间进行左右连接时,如果用where来进行左右连接,他们的顺序改怎么处理

在只有两个表进行左右连接的时候好像没有区别。

当表>2时,

比如加c表:


  ID CNAME
---- -----
   2 cname

 

select a.aname,b.bname,c.cname from a left join b on a.bid=b.bid left join c on b.bid=c.id;

和select a.aname,b.bname,c.cname from a,b,c where a.bid=b.bid(+) and b.bid=c.id(+);

 

 

select a.aname,b.bname,c.cname from b left join c on b.bid=c.id left join a on a.bid=b.bid;

和select a.aname,b.bname,c.cname from a,b,c where b.bid=c.id(+) and  a.bid=b.bid(+);

的记录数及不同了。

该怎么看用where修饰的左右连接的顺序问题呢?

 

http://blog.csdn.net/winter3125/article/details/5032871#comments

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值