MySQL SELF JOIN

17 Mar 2025 | 阅读 2 分钟

自连接(SELF JOIN)是一种用于将一个表与其自身连接的连接方式。在前面的章节中,我们学习了如何使用 INNER、LEFT、RIGHT 和 CROSS JOIN 等不同类型的连接将一个表与其他表进行连接。但是,有时我们需要将同一个表中的数据与其他数据组合起来。在这种情况下,我们就需要使用自连接。

我们可以使用**表别名**来执行自连接。表别名允许我们在单个语句中不重复使用同一个表名。如果在单个查询中不使用表别名而多次使用同一个表名,将会导致错误。

表别名使我们能够为查询中要使用的表设置一个**临时名称**。让我们通过以下说明来理解表别名。

假设我们有一个名为 **"student"** 的表,该表将在单个查询中被使用两次。为了给 student 表设置别名,我们可以这样写:

自连接语法

自连接的语法与连接两个不同表的语法相同。这里,我们为表使用别名,因为两个表名是相同的。以下是 MySQL 中自连接的语法:

注意:您可以根据需要使用其他条件代替 WHERE 子句。

自连接示例

让我们在数据库中创建一个包含以下数据的 **"student"** 表:

MySQL SELF Join

现在,我们将从表中检索所有结果(student_id 和 name),其中 **student_id** 相同,而 **course_id** 不同。执行以下查询以了解 MySQL 中自连接的工作原理:

成功执行后,我们将得到以下输出:

MySQL SELF Join

使用 INNER JOIN 子句的自连接

以下示例解释了如何将 Inner Join 与 Self Join 结合使用。此查询在两个表的 student_id 相等且 course_id 不相等时,返回 student id 和 name。

执行上述语句后,我们将得到以下示例:

MySQL SELF Join

使用 LEFT JOIN 子句的自连接

以下示例解释了如何将 Left Join 与 Self Join 结合使用。此查询在两个表的 student_id 相等时,返回 student name 作为 **monitor** 和 city。

执行上述语句后,我们将得到以下示例:

MySQL SELF Join
下一主题MySQL DELETE JOIN