画图解释SQL联合语句
来源:互联网 发布:如何经营淘宝店铺 编辑:程序博客网 时间:2024/06/11 14:46
不过我还是喜欢这个观点,所以我们来看看能不能用上韦恩图。假设我们有下面两张表。表A在左边,表B在右边。我们给它们各四条记录。
id name id name-- ---- -- ----1 Pirate 1 Rutabaga2 Monkey 2 Pirate3 Ninja 3 Darth Vader4 Spaghetti 4 Ninja
我们用过name字段用几种不同方式把这些表联合起来,看能否得到和那些漂亮的韦恩图在概念上的匹配。
1.INNER JOIN 内连接
SELECT * FROM TableAINNER JOIN TableBON TableA.name = TableB.name id name id name-- ---- -- ----1 Pirate 2 Pirate3 Ninja 4 Ninja
内联合(inner join)只生成同时匹配表A和表B的记录集。(如下图)
2.OUTER JOIN外连接
全外联合(full outer join)生成表A和表B里的记录全集,包括两边都匹配的记录。如果有一边没有匹配的,缺失的这一边为null。——————————————————————————-
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。(如下图)
3.LEFT OUTER JOIN左外连接
生成表的所有记录
——————————————————————————-
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。(如下图)
4.LEFT OUTER JOIN 左外连接 排除不匹配的NULL值
——————————————————————————-
SELECT * FROM TableALEFT OUTER JOIN TableBON TableA.name = TableB.nameWHERE TableB.id IS null id name id name-- ---- -- ----2 Monkey null null4 Spaghetti null null
为了生成只在表A里而不在表B里的记录集,我们用同样的左外联合,然后用where语句排除我们不想要的记录。(如下图)
5. FULL OUTER JOIN 全外连接(排除两边的公共数据)
——————————————————————————-
SELECT * FROM TableAFULL OUTER JOIN TableBON TableA.name = TableB.nameWHERE TableA.id IS null OR TableB.id IS null id name id name-- ---- -- ----2 Monkey null null4 Spaghetti null nullnull null 1 Rutabaganull null 3 Darth Vader
为了生成对于表A和表B唯一的记录集,我们用同样的全外联合,然后用where语句排除两边都不想要的记录。(如下图)
6.笛卡尔积或CROSS JOIN
———————————————————–
还有一种笛卡尔积或者交叉联合(cross join),据我所知不能用韦恩图表示:
SELECT
*
FROM
TableA
CROSS
JOIN
TableB
这个把“所有”联接到“所有”,产生4乘4=16行,远多于原始的集合。如果你学过数学,你便知道为什么这个联合遇上大型的表很危险。
【2013-06-17 更新】下图由 Moffatt 在 2008 年制作(点击可查看大图)。PS:Jeff Atwood 的文章写于 2007 年。
英文原文;Jeff Atwood,编译:伯乐在线 – @奇风余谷
译文链接:http://blog.jobbole.com/40443/
【非特殊说明,转载必须在正文中标注并保留原文链接、译文链接和译者等信息,谢谢合作!】
- 画图解释SQL联合语句
- 画图解释SQL联合语句
- 画图解释SQL联合语句
- 画图解释SQL联合语句
- 画图解释SQL联合语句
- 画图解释SQL联合语句
- 画图解释SQL联合语句
- 画图解释SQL联合语句
- 画图解释SQL联合语句
- 画图解释SQL联合语句
- 【MySQL】画图解释SQL联合语句
- 画图解释 SQL join 语句
- 画图解释 SQL join 语句
- 画图解释 SQL join 语句
- 画图解释 SQL join 语句
- 画图解释 SQL join 语句
- 画图解释 SQL join 语句
- Oracle_画图解释 SQL join 语句
- [Leetcode] Binary Tree Level Order Traversal (Java)
- Java编程思想——第八章续
- 容易被忽略CSS特性
- javascript 一种继承的方式,摘自JavaScript语言精粹
- mac 下 svn working copy locked
- 画图解释SQL联合语句
- linux的查找匹配方式
- 小内存大数据排序
- Hibernate一对多单向关联和双向关联映射方法及其优缺点
- SectionIndexer 的使用(联系人分类索引)
- 谈判的技巧(一)
- Java编程思想——第九章
- C++中的return, exit 与 abort
- 06-3板木通风柜