您的位置:首页 > 数据库

关于sql的链接查询

2009-10-30 15:30 316 查看
首先给出两张测试表

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: