首先给出两张测试表
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。