什么是 MySQL 连接?

mysqlmysqli database更新于 2025/5/25 14:04:17

众所周知,MySQL SELECT 可用于一次从单个表中检索信息,但仅使用一个表无法回答所有问题。因此,为了实现上述目的,即利用存储在多个表中的信息,我们可以使用连接操作。

基本上,MySQL 连接是一种基于两个或多个表之间公共列的值链接数据的方法,结果是一个新的临时表。换句话说,我们可以说 MySQL 连接使我们能够在新的临时表中从两个或多个逻辑相关的表中检索记录。新的临时表是根据两个表共享的列创建的,这些列代表有意义的比较列。

公共值通常是出现在连接的参与表中的相同列名和数据类型。这些列称为连接键或公共键。

MySQL 支持以下类型的连接:

交叉连接

实际上,交叉连接是连接的基本形式。如果我们有两个表,它会获取表 1 的每一行并将其附加到表 2 的每一行。因此,如果表 1 有 3 行,表 2 有 2 行,那么在交叉连接这些表后,我们将获得总共 6 行。为了理解这一点,我们以名为 tbl_1 和 tbl_2 的两个表为例,它们具有以下数据:

mysql> Select * from tbl_1;
+----+--------+
| Id | Name   |
+----+--------+
| 1  | Gaurav  |
| 2  | Rahul   |
| 3  | Raman   |
| 4  | Aarav   |
+----+--------+
4 rows in set (0.00 sec)

mysql> Select * from tbl_2;
+----+---------+
| Id | Name    |
+----+---------+
| A  | Aarav   |
| B  | Mohan   |
| C  | Jai     |
| D  | Harshit |
+----+---------+
4 rows in set (0.00 sec)

现在,下面的查询将对上述表进行 CROSS JOIN。

mysql> Select tbl_1.id, tbl_2.id FROM tbl_1 CROSS JOIN tbl_2;
+----+----+
| id | id |
+----+----+
| 1  | A  |
| 2  | A  |
| 3  | A  |
| 4  | A  |
| 1  | B  |
| 2  | B  |
| 3  | B  |
| 4  | B  |
| 1  | C  |
| 2  | C  |
| 3  | C  |
| 4  | C  |
| 1  | D  |
| 2  | D  |
| 3  | D  |
| 4  | D  |
+----+----+
16 rows in set (0.00 sec)

内连接或等值连接

要形成内连接,我们需要指定一个称为连接谓词的特定条件。实际上,内连接或等值连接需要两个连接表中的行具有匹配的列值。为了理解这一点,以下查询将内连接名为"tbl_1"和"tbl_2"的表。

mysql> SELECT tbl_1.id,tbl_2.id FROM tbl_1 INNER JOIN tbl_2 ON tbl_1.name = tbl_2.name;
+----+----+
| id | id |
+----+----+
| 4  | A  |
+----+----+
1 row in set (0.00 sec)

结果集显示,列名对于 tbl_1 中的 id = 4 和 tbl_2 中的 id = ‘A’ 具有相同的值。

左连接

左连接也需要连接谓词,就像内连接一样。唯一的区别是,当使用 LEFT 连接连接两个表时,会引入左表和右表的概念。它返回左表中的所有行,包括满足连接谓词的行和不满足连接谓词的行。对于与连接谓词不匹配的行,结果集中右表的列中会出现 NULL。为了理解这一点,以下查询使用表 tbl_1 和 tbl_2 执行 LEFT 连接:

mysql> SELECT tbl_1.id,tbl_2.id FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.name = tbl_2.name;
+----+------+
| id | id   |
+----+------+
| 1  | NULL  |
| 2  | NULL  |
| 3  | NULL  |
| 4  | A     |
+----+------+
4 rows in set (0.02 sec)

右连接

它与左连接类似,只是对表的处理是相反的。使用右连接时,右表中的每一行都会出现在结果集中。对于右表中没有左表中匹配行的行,左表中的列将显示 NULL。为了理解它,以下查询使用表 tbl_1 和 tbl_2 执行右连接:

mysql> SELECT tbl_1.id,tbl_2.id
-> FROM tbl_1 RIGHT JOIN tbl_2 ON tbl_1.name = tbl_2.name;
+------+----+
| id   | id |
+------+----+
| 4    | A  |
| NULL | B  |
| NULL | C  |
| NULL | D  |
+------+----+
4 rows in set (0.00 sec)

相关文章


有用资源