谈谈sql连接语句查询--join

首先给出两张测试表

a(aid int, adata varchar(20))            b(bid int, bdata varchar(20))

 

1.join 与 inner join

执行如下语句:

select * from a join b on a.aid = b.bid;

我们会得到如下的结果:

       AID ADATA                                           BID BDATA
---------- ---------------------------------------- ---------- ----------------------------------------
         1   a1                                                       1        b1
         2   a2                                                       2        b2

我们在执行:select * from a inner join b on a.aid = b.bid;

这时会发现执行的结果和上面一样,于是我在这里认为,单写一个join的语句,默认使用inner形式连接查询。这时我也会想到用标准的多表查询去实现,如:select * from a, b where a.aid = b.bid。

上面这些都是在oracle和mysql中测试过的,当然下面所提到的也会做同样的测试。

 

2.left join 与 left outer join

执行如下语句:

select * from a left join b on a.aid = b.bid;

得到的结果如下:

       AID ADATA                                           BID BDATA
---------- ---------------------------------------- ---------- ----------------------------------------
         1   a1                                                       1     b1
         2   a2                                                       2     b2
         3   a3
我们在执行:select * from a left outer join b on a.aid = b.bid;

会发现得到了和不加outer关键字同样的结果。于是认为left outer join简写为left join。

可以尝试一下把上面的outer变成inner。可一执行,就会发现,你的语法错误,oracle,和mysql都会提示你。对应这两张表,情况确实会这样。

 

3. right join 与 right outer join

right join的情况类似,如执行:select * from a right join b on a.aid = b.bid; 结果如下

       AID ADATA                                           BID BDATA
---------- ---------------------------------------- ---------- ----------------------------------------
         1    a1                                                      1     b1
         2    a2                                                      2     b2
                                                                         4     b4

而且也默认为right outer join 的简写是 right join

 

总结:1)inner jion 是内联接,会返回同时符合条件的两个表的记录。

         2)outer join 是外连接,会返回left(right后面表)前面表的所有记录,若(前面)后面表没有符合的相应记录,则显示为NULL。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值