oracle join关键字使用总结

来源:互联网 发布:淘宝开店步骤 编辑:程序博客网 时间:2024/05/17 03:30
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 Rutabaga2 Monkey    2 Pirate3 Ninja     3 Darth Vader4 Spaghetti 4 Ninja


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

SELECT * FROM TableAINNER JOIN TableBON TableA.name = TableB.name  ;


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


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



SELECT * FROM TableAFULL OUTER JOIN TableBON TableA.name = TableB.name ;


id name  id name-- ----  -- ----1 Pirate 2 Pirate2 Monkey null null3 Ninja  4 Ninja4 Spaghetti null nullnull null 1 Rutabaga null null 3 Darth Vader


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



SELECT * FROM TableALEFT OUTER JOIN TableBON TableA.name = TableB.name ;


id name id name-- ---- -- ----1 Pirate 2 Pirate2 Monkey null null3 Ninja 4 Ninja4 Spaghetti null null


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



总结图:





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




原创粉丝点击