内连接与外连接

Posted EbowTang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内连接与外连接相关的知识,希望对你有一定的参考价值。

在数据库系统中,join用于比较和组合(字面意思是连接)并从数据库中的两个或多个表返回特定数据行。内连接从表中查找并返回匹配数据,而外连接从表中查找并返回匹配数据和一些不同的数据。

内连接

内连接侧重于两个表之间的共性。使用内部联接时,要比较的两个(或多个)表之间,必须有一些匹配数据,即链接的条件。内部联接在表中搜索匹配或重叠的数据。找到后,内连接将信息合并并返回到一个新表中。

SELECT 字段列表
FROM A表 INNER JOIN B表
ON 关联条件
WHERE 等其他子句;

内连接例子

让我们考虑两个表的常见场景:产品价格和数量。两个表中的公共信息是产品名称,因此这是连接表的逻辑列。有一些产品在两个表中是通用的;其他的对于其中一个表是唯一的,并且在另一个表中没有匹配项。

下面是通过产品名称作为连接条件,将符合条件的信息返回

外连接

外连接返回一组记录(或行),其中包括内连接将返回的内容,但也包括在其他表中找不到对应匹配项的其他行。
外连接分为三种类型:

  • 左外连接(或左连接)
  • 右外连接(或右连接)
  • 完全外连接(或完全连接)

这些外部联接中的每一个都指的是正在比较、组合和返回的数据部分。有时在此过程中会产生null,因为某些数据是共享的,而其他数据则不是。

左连接

左外连接将返回表 1中的所有数据和所有共享数据,但仅返回表 2 中的相应数据,即左连接。

SELECT 字段列表
FROM A表 LEFT JOIN B表
ON 关联条件
WHERE 等其他子句;

左连接例子

在我们的示例数据库中,“左边”(prices表)有两种产品——oranges和 tomatoes ,在“右边”(quantities表)上没有相应的条目。在左连接中,这些行包含在结果集中,数量列中为 NULL。结果中的其他行与内部联接相同。

右连接

右外连接返回表 2 的数据和所有共享数据,但仅返回表 1 中的相应数据,即右连接。

 
SELECT 字段列表
FROM A表 RIGHT JOIN B表
ON 关联条件
WHERE 等其他子句;

右连接例子

与左连接示例类似,右外连接的输出包括内连接的所有行和来自“右”(quantities表)的两行 - broccoli 和squash - 在左侧没有匹配的条目。

全连接

流行的 mysql 数据库管理系统不支持的完全外连接或完全连接,无论是否存在共享信息,都会合并并返回来自两个或多个表的所有数据。将完全连接视为简单地复制所有指定信息,但在一个表中,而不是在多个表中。在缺少匹配数据的情况下,将产生空值。

SELECT 字段列表
FROM A表 FULL JOIN B表
ON 关联条件
WHERE 等其他子句;

这些只是基础知识,但很多事情都可以通过连接来完成。甚至还有可以排除其他连接的连接!

以上是关于内连接与外连接的主要内容,如果未能解决你的问题,请参考以下文章

内连接与外连接(全网最详细)

MySQL 内连接与外连接

内连接与外连接

SQL内连接与外连接用法与区别

2020.03.14 内连接与外连接的区别

内连接与外连接-及其典型案例