谈谈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。

你可能感兴趣的:(oracle,sql,mysql)