SQL的Join使用图解教程

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

假设我们有两张表。

Table A 是左边的表。

Table B 是右边的表。

其各有四条记录,其中有两条记录是相同的,如下所示:

复制代码 代码如下:

id name id name

-- ---- -- ----

1 Pirate 1 Rutabaga

2 Monkey 2 Pirate

3 Ninja 3 Darth Vader

4 Spaghetti 4 Ninja

下面让我们来看看不同的Join会产生什么样的结果。

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

id name id name
-- ---- -- ----
1 Pirate 2 Pirate
3 Ninja 4 NinjaInner join
产生的结果集中,是A和B的交集。

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 VaderFull outer join 产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。

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 nullLeft outer join 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

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表中没有的集合。

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表都没有出现的数据集。

还需要注册的是我们还有一个是“交差集” cross join, 这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积。表达式如下:

复制代码 代码如下:

SELECT * FROM TableA

CROSS JOIN TableB

这个笛卡尔乘积会产生 4 x 4 = 16 条记录,一般来说,我们很少用到这个语法。但是我们得小心,如果不是使用嵌套的select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险的,尤其是表很大的时候。

时间: 2024-09-20 23:25:50

SQL的Join使用图解教程的相关文章

SQL的Join使用图解教程_MsSql

对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams 解释了SQL的Join.我觉得清楚易懂,转过来. 假设我们有两张表. Table A 是左边的表. Table B 是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示

sql入门教程:SQL FULL JOIN 关键字使用教程

sql入门教程:SQL FULL JOIN 关键字使用教程 SQL FULL JOIN 关键字 全连接的关键字时,返回行是比赛中的一个表. SQL语法 SELECT column_name(s) FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name 我们来看个例子吧. P_Id LastName FirstName Address City 1 Hansen Ola Ti

Microsoft SQL Server 2008安装图解教程(Windows 7)_mssql2008

Microsoft SQL Server 2008 安装图解(Windows 7) FoxDie 2010年04月17日 简介 本文详细记录了一次完整的Microsoft SQL Server 2008在Windows 7操作系统上的安装过程.注意:Microsoft SQL Server 2008与Windows 7操作系统存在一定的兼容性问题,在完成安装之后需要为Microsoft SQL Server 2008安装SP1补丁.下面将详细说明整个安装过程. 安装日志     在Windows

Win2003系统下SQL Server 2008安装图解教程(详细图解)_mssql2008

最近不少用户在windows2003 server 32位操作系统上安装SQL Server2008总是失败,出现大量错误.今天经过通过我反复测试安装,找出了一个便捷的安装方法,节省大家宝贵时间,具体方法如下,供大家参考: 准备工作: 首先需要下载下面这个软件 1.Windows Installer 4.5 Redistributable - 简体中文 下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=8483 下载时选择:

SQL Server 2012 安装图解教程(附sql2012下载地址)_MsSql

在安装微软最新数据库SQL Server 2012之前,编者先确定一下安装环境:Windonws 7 SP1,32位操作系统.CPU是2.1GHz赛扬双核T3500,内存2.93GB. sql2012下载 http://www.jb51.net/softs/79861.html 安装SQL Server 2012的软硬件环境参数 根据微软的下载提示,32位的Windows 7操作系统,只需下载列表最下面的CHSx86SQLFULL_x86_CHS_Core.box. CHSx86SQLFULL_

Windows2008系统Microsoft SQL Server 2008安装图解教程

在Windows2008操作系统系,启动Microsoft SQL 2008安装程序后,系统兼容性助手将提示软件存在兼容性问题,在安装完成之后必须安装SP1补丁才能运行,如图1-1所示.这里选 择“运行程序”开始SQL Server 2008的安装.     图1-1兼容性问题提示   进入SQL Server安装中心后跳过“计划”内容,直接选择界面左侧列表中的“安装”,如图1-2所示,进入安装列表选择.     图1-2SQL Server安装中心-计划   如图1-3所示,进入SQL Ser

SQL Server 2012 安装图解教程(附sql2012下载地址)

在安装微软最新数据库SQL Server 2012之前,编者先确定一下安装环境:Windonws 7 SP1,32位操作系统.CPU是2.1GHz赛扬双核T3500,内存2.93GB. sql2012下载 http://www.jb51.net/softs/79861.html 安装SQL Server 2012的软硬件环境参数 根据微软的下载提示,32位的Windows 7操作系统,只需下载列表最下面的CHSx86SQLFULL_x86_CHS_Core.box. CHSx86SQLFULL_

SQL SERVER 2014 安装图解教程(含SQL SERVER 2014下载)

2015年1月1日,新的一年开始之际,本来应该好好做点有意义的事情来跨个年的.结果,老习惯 - 睡觉之前一定要折腾一下电脑,说干就干,给新到的 DELL 电脑装虚机,下载 SQL SERVER 2014,安装 SQL SERVER 2014. SQL SERVER 2014 安装完成以后,不像 SQL SERVER 2008 R2 会提供一个 BIDS 开发工具,也不像 SQL SERVER 2012 会提供一个 SSDT 开发工具,也就是说 BI 的开发工具(SSIS, SSRS, SSAS)

SQL LEFT JOIN 关键字教程

SQL LEFT JOIN 关键字教程 LEFT JOIN的关键字返回所有行从左边的表( table_name1 ) ,即使没有比赛的权利表( table_name2 ) . 左加入的SQL语法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name 好了我们来看看left join的例子如何? Id LastName First