oracle join关键字使用总结

1.内连接: 选出两个表中所有符合连接条件的row构成的集合。
2.外连接:分为LEFT、RIGHT、FULL三种:
如有R与S做连接,那么LEFT是所有满足条件的row以及所有在R属性对应值在S中为NULL的集合。 注意( left join 是 left outer join  简写
RIGHT是所有满足条件的row以及所有在S属性对应值在R中为NULL的集合
FULL是所有满足条件的row以及任何在R或S中出现NULL的集合。
现在可以看到,三种外连接的区别就在于对空值的处理不同(空值真是数据库的一大困难)。

假设我们有下面两张表。表A在左边,表B在右边。我们给它们各四条记录。

id name     id name
-- ----     -- ----
1 Pirate    1 Rutabaga
2 Monkey    2 Pirate
3 Ninja     3 Darth Vader
4 Spaghetti 4 Ninja


我们用过name字段用几种不同方式把这些表联合起来,看能否得到和那些漂亮的韦恩图在概念上的匹配。

SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name  ;


id name  id name
-- ----  -- ----
1 Pirate 2  Pirate
3 Ninja  4  Ninja


内联合(inner join)只生成同时匹配表A和表B的记录集。(如下图)



SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name ;


id name  id name
-- ----  -- ----
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja  4 Ninja
4 Spaghetti null null
null null 1 Rutabaga 
null null 3 Darth Vader


全外联合(full outer join)生成表A和表B里的记录全集,包括两边都匹配的记录。如果有一边没有匹配的,缺失的这一边为null。(如下图)



SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name ;


id name id name
-- ---- -- ----
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null


左外联合(left outer join)生成表A的所有记录,包括在表B里匹配的记录。如果没有匹配的,右边将是null。(如下图)



总结图:





参考: http://chuansongme.com/n/481377




猜你喜欢

转载自forlan.iteye.com/blog/2081446
今日推荐