图解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里面包含了要分析的数据,称之为度量值。显而易见,一组三维坐标唯一确定了一个子立方…

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表格中,领导看起来眼花缭乱。小编想,要是能以图表可视化展现出来,领导就可以看到项目近几个月的走势,也知道之后要怎么决策了。小编尝试了使用…

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

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

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

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

am335x修改sd卡cd管脚

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

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

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

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

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

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

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

二叉树的深度_十七:二叉树的最小深度

二叉树的最小深度:从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最短路径的长度为树的最小深度。算法一/** * description 二叉树最小深度 * param {*} root 二叉树 */function binaryTreeMinDepth(root) { // 节点不存在时返回长度…

苹果怎么付费购买内存_【苹果手机多长时间清理一次内存,怎么清理?】

一、微信缓存微信作为每天使用频率最多的软件,是需要重点清理的对象。操作:我—设置—通用—清理微信存储空间—查看微信存储空间,选择联系人进行清理。二、短信现在很少有人会用短信联系,一般都是一些垃圾广告,我们可…

发票管理软件_财务人员都在用的这款发票管理软件,真的值得购买么?

(1)电子凭证和纸质会计凭证具有同等效力;(2)报销管理也需要经办、审核、审批流程,且能防止重复入账;(3)以电子凭证纸质版入账留档保存的,必须同时保存电子档。以及重复繁琐的发票查验工作,把最近处于风口浪尖的电子发票…

自动点击器如何设置最快_铁粉技巧 | iPhone如何设置自动开关机,iPhone更改字体...

大家好我是小雷没有废话直奔主题今天让我们看下iPhone如何设置自动开关机首先需要了解的是,iPhone设备是不能设置自动开机的。那么如何每天自动关机呢?1,打开时钟点击计时器。2,点击计时结束时启动3,滑动页面点击停止播…

python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...

前言:今天为大家带来的内容,是五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码),在这里还是要啰嗦下,为了有更好的观赏性,大部分代码用图片的方式呈现出来!喜欢的话不忘点赞关注不迷路哦…

uniapp开发实例github_跨端开发痛点?送你一款Vue最流行的跨端框架——uni-app

前言今天来聊一下前端必备技能——小程序开发。从最早发布的微信小程序,到后来的支付宝小程序、字节跳动小程序、百度小程序、QQ小程序,还有最近发布的360小程序,面对这么多套的代码,开发者该如何开发呢?当业务要求同时…

计算机怎么把单元格内容水平居中,win10系统下怎样让Word中的表格内容居中

Word是我们经常会使用到的一款文字处理软件,其具有非常强大的功能。那么,我们应该怎样使Word中的表格内容居中呢?接下来,小编就以 windows10正式版系统 为例,给大家分享具体操作方法。具体如下:1、首先在Word软件中准备…

双稳态电路的两个稳定状态是什么_从双稳态到双“更”稳态 ——叶芳伟课题组在拓扑光子学研究方向上取得新进展...

你拿起一个计算器,输入“26”,计算器会输出“8”;过了一会儿,你又在这个计算器上输入“26”,它依然会输出“8”。这种靠谱的计算器——对于同一个输入,它始终还给我们同一个输出——我们称之为线性计算器或…

【C++专题】static_cast, dynamic_cast, const_cast探讨

首先回顾一下C类型转换:C类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion) : 在混合类型的 算术表达式中, 最宽的数据类型成为目标转换…