📜  “内连接”和“外连接”的区别(1)

📅  最后修改于: 2023-12-03 15:06:09.309000             🧑  作者: Mango

“内连接”和“外连接”的区别

在数据库中,连接(join)是将两个或多个表中的数据连接起来的一种操作。连接可以分为内连接和外连接两种类型。

内连接

内连接是指只返回两个或多个表中符合连接条件的行,不包括不符合条件的行。例如,我们有两个表A和B,它们各自有编号和名称两个字段。如果我们想要将两个表中所有编号相同的数据连接起来,可以使用以下SQL语句:

SELECT A.编号, A.名称, B.名称
FROM A
INNER JOIN B ON A.编号 = B.编号;

上述SQL语句中,INNER JOIN表示使用内连接。如果A表中有编号为1、2、3、4的数据,B表中有编号为2、3、4、5的数据,那么上述语句返回的结果为:

| 编号 | A表名称 | B表名称 | | --- | --- | --- | | 2 | A2 | B2 | | 3 | A3 | B3 | | 4 | A4 | B4 |

可以看到,只有编号为2、3、4的行被返回了,编号为1和5的行没有被返回。

外连接

外连接是指返回符合连接条件的行以及不符合条件的行。外连接可以分为左外连接、右外连接和全外连接三种类型。

左外连接(left outer join)是指以左表(左边的表)为基准,返回左表中所有数据以及右表中符合连接条件的数据,没有匹配的右表数据则用NULL填充。例如,我们有两个表A和B,它们各自有编号和名称两个字段。如果我们想要将A表中所有数据和B表中编号相同的数据连接起来,可以使用以下SQL语句:

SELECT A.编号, A.名称, B.名称
FROM A
LEFT OUTER JOIN B ON A.编号 = B.编号;

上述SQL语句中,LEFT OUTER JOIN表示使用左外连接。如果A表中有编号为1、2、3、4的数据,B表中有编号为2、3、4、5的数据,那么上述语句返回的结果为:

| 编号 | A表名称 | B表名称 | | --- | --- | --- | | 1 | A1 | NULL | | 2 | A2 | B2 | | 3 | A3 | B3 | | 4 | A4 | B4 |

可以看到,左表中所有行都被返回了,如果右表中没有符合条件的行,则用NULL填充。

右外连接(right outer join)与左外连接相反,是以右表为基准返回右表中所有数据以及左表中符合连接条件的数据,没有匹配的左表数据则用NULL填充。全外连接(full outer join)是左右外连接的结合,返回左右两表中所有数据和符合条件的数据,没有匹配的数据用NULL填充。

需要注意的是,不同数据库的语法可能略有区别,请根据自己使用的数据库进行相应修改。