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在右边。我们给它们各四条记录。
我们用过name字段用几种不同方式把这些表联合起来,看能否得到和那些漂亮的韦恩图在概念上的匹配。
内联合(inner join)只生成同时匹配表A和表B的记录集。(如下图)
全外联合(full outer join)生成表A和表B里的记录全集,包括两边都匹配的记录。如果有一边没有匹配的,缺失的这一边为null。(如下图)
左外联合(left outer join)生成表A的所有记录,包括在表B里匹配的记录。如果没有匹配的,右边将是null。(如下图)
总结图:
参考:http://chuansongme.com/n/481377
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