图解SQL的inner join、left join、right join、full outer join、union、union all的区别

对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章,通过文氏图 Venn diagrams 解释了SQL的Join。我觉得清楚易懂,转过来。

假设我们有两张表。Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的,如下所示:让我们看看不同JOIN的不同

A表
idname
1Pirate
2Monkey
3Ninja
4Spaghetti
B表
idname
1Rutabaga
2Pirate
3Darth Vade
4Ninja

1.INNER JOIN

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

结果集
(TableA.)(TableB.)
idnameidname
1Pirate2Pirate
3Ninja4Ninja

Inner join 产生的结果集中,是A和B的交集。

2.FULL [OUTER] JOIN 
(1)
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name 
结果集
(TableA.)(TableB.)
idnameidname
1Pirate2Pirate
2Monkeynullnull
3Ninja4Ninja
4Spaghettinullnull
nullnull1Rutabaga
nullnull3Darth Vade
Full outer join 产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。
可以使用IFNULL判断。
(2)
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
WHERE TableA.id IS null OR TableB.id IS null
结果集
(TableA.)(TableB.)
idnameidname
2Monkeynullnull
4Spaghettinullnull
nullnull1Rutabaga
nullnull3Darth Vade
产生A表和B表没有交集的数据集。
3.LEFT [OUTER] JOIN
(1)
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
结果集
(TableA.)(TableB.)
idnameidname
1Pirate2Pirate
2Monkeynullnull
3Ninja4Ninja
4Spaghettinullnull
Left outer join 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。
(2)
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null
结果集
(TableA.)(TableB.)
idnameidname
2Monkeynullnull
4Spaghettinullnull

产生在A表中有而在B表中没有的集合。

4.RIGHT [OUTER] JOIN
RIGHT OUTER JOIN 是后面的表为基础,与LEFT OUTER JOIN用法类似。这里不介绍了。
5.UNION UNION ALL
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。UNION 只选取记录,而UNION ALL会列出所有记录。
(1)SELECT name FROM TableA UNION SELECT name FROM TableB
新结果集
name
Pirate
Monkey
Ninja
Spaghetti
Rutabaga
Darth Vade
选取不同值
(2)SELECT name FROM TableA UNION ALL SELECT name FROM TableB
新结果集
name
Pirate
Monkey
Ninja
Spaghetti
Rutabaga
Pirate
Darth Vade
Ninja

全部列出来

(3)注意:

SELECT * FROM TableA UNION SELECT * FROM TableB
新结果集
idname
1Pirate
2Monkey
3Ninja
4Spaghetti
1Rutabaga
2Pirate
3Darth Vade
4Ninja
由于 id 1 Pirate   与 id 2 Pirate 并不相同,不合并
还需要注册的是我们还有一个是“交差集” cross join, 这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积。表达式如下:SELECT * FROM TableA CROSS JOIN TableB
这个笛卡尔乘积会产生 4 x 4 = 16 条记录,一般来说,我们很少用到这个语法。但是我们得小心,如果不是使用嵌套的select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险的,尤其是表很大的时候。


感谢!http://blog.diyiye.com/?post=10

转载于:https://www.cnblogs.com/andy-wcl/archive/2013/03/09/3218144.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华南主板超频设置图解_AMD用户不会超频不要紧,开启这个功能免费的性能提升...

现在谈到DIY电脑,基本上大家都会了解到“超频”这个词,超频就是采用人为的方式将CPU、显卡等硬件的工作频率提高,让它们在高于其额定的频率状态下稳定工作。完整的超频必须有两点,提升频率并且稳定,很多时候提升频率容…

凹入表形式打印树形结构_【树形立方体】立方体有哪些特性?

迈安带你走进【迈安带你走进】如上图所示,这是由三个维度构成的一个树形立方体,立方体中包含了满足条件的cell(子立方块)值,这些cell里面包含了要分析的数据,称之为度量值。显而易见,一组三维坐标唯一确定了一个子立方…

小学有学计算机课程,如何进行小学计算机课程有效教学.doc

如何进行小学计算机课程有效教学如何进行小学计算机课程有效教学摘要:计算机课程,作为近年来在基础教育阶段,特别是小学阶段新开设的课程,如何进行有效教学,尽可能的提高课堂教学效果,是众多教师关注的热点…

cs架构用什么语言开发_用Rust语言开发微信小程序

由于stdweb已经好久没有更新了,本人又写了另外一篇:JiaYe:用Rust语言开发微信小程序:wasm-bindgen​zhuanlan.zhihu.comstdweb可以轻松将Rust代码编译为JavaScript和Webassembly字节码,本例中使用asmjs-unknown-emscri…

利用线性代数的方法求斐波那契数列的通项

由于word编辑的公式打出来全是黑的,所以只能贴图咯。下次换个编辑器。转载于:https://www.cnblogs.com/maplewizard/archive/2013/03/10/2952623.html

zookeeper 可视化_大厂,常用,四款,大屏可视化工具

小编最经常的工作是将一些项目的数据从数据库导出,然后分门别类的列到excel表格中,领导看起来眼花缭乱。小编想,要是能以图表可视化展现出来,领导就可以看到项目近几个月的走势,也知道之后要怎么决策了。小编尝试了使用…

shared_ptr智能指针源码剖析

前几天有个人问了我一个问题&#xff1a; 如何将一个智能指针作为函数的返回值传递出来。当时这个问题一下子把我问倒了&#xff0c;后来经人提醒有一个叫shared_ptr的智能指针可以解决这个问题。 将shared_ptr作为函数返回值的代码是这样的&#xff1a; 01#include <tr1…

计算机用户win7修改不,Win7电脑时间改不了的解决方法

在平时的工作中&#xff0c;我们经常会碰到一些问题&#xff0c;其中最常见的就是电脑时间改不了了。其实遇到这个问题很好解决的&#xff0c;但是很多用户都不太懂&#xff0c;为此小编赶紧整理了Win7电脑时间改不了的解决方法来帮助大家&#xff0c;大家赶紧看看吧&#xff0…

win7蓝屏0x000000f4修复_注意:关于近期多数电脑蓝屏的处理和预防方法

近期出现部分用户电脑因win7操作系统服役期结束&#xff0c;更新操作系统补丁导致系统蓝屏&#xff0c;错误代码0X000000F4的现象(如下图所示)&#xff1a;在此提醒&#xff0c;可尝试按照以下方法进行处理并设置。如果还没有出现蓝屏的客户&#xff0c;在系统开机时如出现如下…

用yum安装完mysql后没有mysqld的问题

在Centos中用命令 yum install mysql安装数据库&#xff0c;但装完后运行mysqld启动mysql的时候提示找不到&#xff0c;通过 find / | grep mysqld 也没找到mysqld的目录&#xff0c;后来在Google上搜索下&#xff0c;才知道用yum安装时候mysql也有三个参数的。 yum install my…

python中for和while可以有else_Python 中的for,if-else和while语句

for循环功能for 循环是一种迭代循环机制&#xff0c;迭代即重复相同的逻辑操作&#xff0c;每次的操作都是基于上一次的结果而进行的。并且for循环可以遍历任何序列的项目&#xff0c;如一个列表或者一个字符串语法for 循环的一般格式如下&#xff1a;for in 注释&#xff1a;v…

am335x修改sd卡cd管脚

任务&#xff1a;修改SD卡CD管脚&#xff0c;CD管脚是用来给系统通知SD卡的插入与拔出消息的&#xff0c;tq3358默认用的是 spi0_cs1(GPIO0_6)&#xff0c;现在要改为GPIO1_16 1. 查看原理图核心板原理图 MMC0的SDCD接的是GPIO0_6。 2. 查看 arch\arm\mach-omap2\mux33…

未来计算机论文1500,致未来的自己作文1500字

最了解自己的自己&#xff1a;展信乐&#xff01;此信寄予你&#xff0c;许只是无处发泄无聊的情绪吧&#xff0c;你若收到&#xff0c;必然会懂。不知时隔三年&#xff0c;你是否还能记得&#xff0c;那个多少还有些单纯的我&#xff1f;在过去的三年里&#xff0c;那个冒冒失…

sql server数据库还原方法

把数据库的备份文件放到服务器的任意目录下先&#xff0c; 然后按下面的步骤做。 如何从备份设备还原备份&#xff08;企业管理器&#xff09; 从备份设备还原备份 展开服务器组&#xff0c;然后展开服务器。 展开"数据库"文件夹&#xff0c;右击数据库&#xff0c;指…

cad插件_抖音最火CAD插件教程汇总

左下角阅读原文看CAD视频好课推荐&#xff1a;1、CAD2014&#xff1a;点击查看 2、室内CAD&#xff1a;点击查看 3、CAD2019&#xff1a;点击查看4、CAD2018&#xff1a;点击查看5、Bim教程&#xff1a;点击查看6、室内手绘&#xff1a;点击查看7、CAD三维&#xff1a;点击查看…

在内存中建立文件_磁盘与文件,搞懂它

说一说计算机中的非常重要的两个东西磁盘和文件。搞清楚这两个东西有利于我们理解高级语言中关于I/O流操作的设计。它就像一把大杀器一样&#xff0c;无往而不利。想一想&#xff0c;磁盘作为一个电脑中的硬件设备&#xff0c;操作系统是如何管理磁盘设备的&#xff1f;文件其实…

libxml2交叉编译问题及解决办法

libxml2安装中出现的错误:cannot remove libtoolT: No such file or directory解决方法: 修改configure文件 $ vim configure删除这一行: $RM "$cfgfile" 重新再运行 $ ./configure # ./configure --hostarm-linux --buildi386-linux --targetarm --prefix/u…

win7 dos窗口输入命令必须加后缀问题,例如 java必须输java.exe

1、描述&#xff1a; 当java的环境变量设置正确后依然无法java &#xff0c;只有添加java.exe后方可运行问题 2、位置&#xff1a;win 环境变量中的pathtext 3、解决方案&#xff1a;恢复默认的值即可(或google参考别人的)转载于:https://www.cnblogs.com/ki-tom/archive/2013/…

平板电脑应用_什么是机房巡检AI机器人?工业平板电脑的应用如何体现

机房巡检AI机器人&#xff0c;顾名思义&#xff0c;它的主要工作是在机房里做巡逻检查&#xff0c;是巡检机器人类别下的一个型号&#xff0c;类似的还有电站巡检AI机器人&#xff0c;铁路巡检AI机器人等&#xff0c;总之&#xff0c;它们的设计研发就是为了某个特定的工作环境…

东北师范大学计算机科学与技术录取分数线,东北师范大学计算机科学与技术专业2015年在河南理科高考录取最低分数线...

类似问题答案东北师范大学计算机类专业2016年在河南理科高考录取最低分数线学校 地 区 专业 年份 批次 类型 分数 东北师范大学 河南 计算机类 2016 一批 理科 557 东北师范大学 河南 计算机类 2016 一批 理科 557 学校 地 区 专业 年份 批次 类型 分数 东北师范大学 河南 计算…