首页 数据库 mysql教程 详解 SQL 对集合的操作:交、差、并

详解 SQL 对集合的操作:交、差、并

Jun 07, 2016 pm 04:14 PM
sql 操作 详解 集合

我认为Ligaya Turmelle的关于SQL联合(join)语句的帖子对于新开发者来说是份很好的材料。SQL 联合语句好像是基于集合的,用韦恩图来解释咋一看是很自然而然的。不过正如在她的帖子的回复中所说的,在测试中我发现韦恩图并不是十分的匹配SQL联合语法。 不过

我认为Ligaya Turmelle的关于SQL联合(join)语句的帖子对于新开发者来说是份很好的材料。SQL 联合语句好像是基于集合的,用韦恩图来解释咋一看是很自然而然的。不过正如在她的帖子的回复中所说的,在测试中我发现韦恩图并不是十分的匹配SQL联合语法。

不过我还是喜欢这个观点,所以我们来看看能不能用上韦恩图。假设我们有下面两张表。表A在左边,表B在右边。我们给它们各四条记录。

1 2 3 4 5 6 id name       id  name -- ----       --  ---- 1  Pirate     1   Rutabaga 2  Monkey     2   Pirate 3  Ninja      3   Darth Vader 4  Spaghetti  4   Ninja

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

1 2 3 4 5 6 7 8 SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name   id  name       id   name --  ----       --   ---- 1   Pirate     2    Pirate 3   Ninja      4    Ninja

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

inner join

——————————————————————————-

1 2 3 4 5 6 7 8 9 10 11 12 SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name   id    name       id    name --    ----       --    ---- 1     Pirate     2     Pirate 2     Monkey     null  null 3     Ninja      4     Ninja 4     Spaghetti  null  null null  null       1     Rutabaga       null  null       3     Darth Vader

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

Full outer join

——————————————————————————-

1 2 3 4 5 6 7 8 9 10 SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name   id  name       id    name --  ----       --    ---- 1   Pirate     2     Pirate 2   Monkey     null  null 3   Ninja      4     Ninja 4   Spaghetti  null  null

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

Left outer join

——————————————————————————-

1 2 3 4 5 6 7 8 9 SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null   id  name       id     name --  ----       --     ---- 2   Monkey     null   null 4   Spaghetti  null   null

为了生成只在表A里而不在表B里的记录集,我们用同样的左外联合,然后用where语句排除我们不想要的记录。(如下图):差集

——————————————————————————-

1 2 3 4 5 6 7 8 9 10 11 12 SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableA.id IS null OR TableB.id IS null   id    name       id    name --    ----       --    ---- 2     Monkey     null  null 4     Spaghetti  null  null null  null       1     Rutabaga null  null       3     Darth Vader

为了生成对于表A和表B唯一的记录集,我们用同样的全外联合,然后用where语句排除两边都不想要的记录。(如下图)

 

———————————————————–

 

还有一种笛卡尔积或者交叉联合(cross join),据我所知不能用韦恩图表示:

1 2 SELECT * FROM TableA CROSS JOIN TableB

 

这个把“所有”联接到“所有”,产生4乘4=16行,远多于原始的集合。如果你学过数学,你便知道为什么这个联合遇上大型的表很危险。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1662
14
CakePHP 教程
1418
52
Laravel 教程
1311
25
PHP教程
1261
29
C# 教程
1234
24
Hibernate 框架中 HQL 和 SQL 的区别是什么? Hibernate 框架中 HQL 和 SQL 的区别是什么? Apr 17, 2024 pm 02:57 PM

HQL和SQL在Hibernate框架中进行比较:HQL(1.面向对象语法,2.数据库无关的查询,3.类型安全),而SQL直接操作数据库(1.与数据库无关的标准,2.可执行复杂查询和数据操作)。

为何在Go语言中难以实现类似集合的功能? 为何在Go语言中难以实现类似集合的功能? Mar 24, 2024 am 11:57 AM

在Go语言中难以实现类似集合的功能,是一个困扰许多开发者的问题。相比其他编程语言如Python或Java,Go语言并没有内置的集合类型,如set、map等,这给开发者在实现集合功能时带来了一些挑战。首先,让我们来看一下为何在Go语言中难以直接实现类似集合的功能。在Go语言中,最常用的数据结构是slice(切片)和map(映射),它们可以完成类似集合的功能,但

Linux Deploy的操作步骤及注意事项 Linux Deploy的操作步骤及注意事项 Mar 14, 2024 pm 03:03 PM

LinuxDeploy的操作步骤及注意事项LinuxDeploy是一款强大的工具,可以帮助用户在Android设备上快速部署各种Linux发行版,让用户能够在移动设备上体验到完整的Linux系统。本文将详细介绍LinuxDeploy的操作步骤以及注意事项,同时提供具体的代码示例,帮助读者更好地使用这一工具。操作步骤:安装LinuxDeploy:首先在

华为Mate60 Pro截屏操作步骤分享 华为Mate60 Pro截屏操作步骤分享 Mar 23, 2024 am 11:15 AM

随着智能手机的普及,截屏功能成为日常使用手机的必备技能之一。华为Mate60Pro作为华为公司的旗舰手机之一,其截屏功能自然也备受用户关注。今天,我们就来分享华为Mate60Pro手机的截屏操作步骤,让大家能够更加便捷地进行截屏操作。首先,华为Mate60Pro手机提供了多种截屏方式,可以根据个人习惯选择适合自己的方式进行操作。下面详细介绍几种常用的截

PHP模运算符的作用及用法详解 PHP模运算符的作用及用法详解 Mar 19, 2024 pm 04:33 PM

PHP中的模运算符(%)是用来获取两个数值相除的余数的。在本文中,我们将详细讨论模运算符的作用及用法,并提供具体的代码示例来帮助读者更好地理解。1.模运算符的作用在数学中,当我们将一个整数除以另一个整数时,会得到一个商和一个余数。例如,当我们将10除以3时,商为3,余数为1。模运算符就是用来获取这个余数的。2.模运算符的用法在PHP中,使用%符号来表示模

MySQL连接数对数据库性能的影响分析 MySQL连接数对数据库性能的影响分析 Mar 16, 2024 am 10:09 AM

MySQL连接数对数据库性能的影响分析随着互联网应用的不断发展,数据库成为了支撑应用系统重要的数据存储和管理工具。在数据库系统中,连接数是一个重要的概念,它直接关系到数据库系统的性能和稳定性。本文将从MySQL数据库的角度出发,探讨连接数对数据库性能的影响,并通过具体的代码示例进行分析。一、连接数是什么?连接数指的是数据库系统同时支持的客户端连接数,也可以理

Astar质押原理、收益拆解、空投项目及策略 & 操作保姆级攻略 Astar质押原理、收益拆解、空投项目及策略 & 操作保姆级攻略 Jun 25, 2024 pm 07:09 PM

目录Astar Dapp 质押原理质押收益 拆解潜在空投项目:AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap 质押策略 & 操作“AstarDapp质押”今年初已升级至V3版本,对质押收益规则做了不少调整。目前首个质押周期已结束,第二质押周期的“投票”子周期刚开始。要获取“额外奖励”收益,需把握此关键阶段(预计持续至6月26日,现余不到5天)。我将细致拆解Astar质押收益,

Win8电脑开机密码忘记?这样操作立马恢复! Win8电脑开机密码忘记?这样操作立马恢复! Mar 27, 2024 pm 10:12 PM

Win8电脑开机密码忘记是很多人在日常使用电脑时会遇到的问题。当我们忘记了登录密码,会导致无法正常进入系统,给我们的日常使用带来不便。如果你正好碰到了这个问题,不必担心,下面我将介绍一些简单的操作,帮助你快速恢复Win8电脑的开机密码。方法一:使用Microsoft账户密码如果你的Win8电脑登录使用的是Microsoft账户,你可以尝试使用该账户的密码进行

See all articles