MySQL 自连接

MySQL 自连接

SELF JOIN是一种用于将表与自身连接的方法。在前面的部分中,我们已经学习了如何使用不同的JOIN(包括INNER、LEFT、RIGHT和CROSS JOIN)将表与其他表进行连接。然而,有时需要将数据与同一表中的其他数据进行组合。在这种情况下,我们使用Self Join。

我们可以使用 表别名 来执行Self Join。表别名允许我们在单个语句中不重复使用相同的表名。如果我们在单个查询中多次使用相同的表名而没有使用表别名,会导致错误。

表别名使我们能够在查询中使用即将使用的表的 临时名称 。让我们通过以下解释来理解表别名。

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

Select … FROM student AS S1 
INNER JOIN student AS S2;

自连接语法

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

SELECT s1.col_name, s2.col_name...
FROM table1 s1, table1 s2
WHERE s1.common_col_name = s2.common_col_name;

注意:根据您的需求,您还可以使用其他条件,而不是 WHERE 子句。

自连接示例

让我们在数据库中创建一个名为 “student” 的表,其中包含以下数据:

MySQL 自连接

现在,我们将从表中获取所有 student_idname 不相等的结果。执行以下查询了解 MySQL 中自连接的工作方式:

SELECT  s1.student_id, s1.name
FROM student AS s1, student s2
WHERE s1.student_id=s2.student_id
AND s1.course_id<>s2.course_id;

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

MySQL 自连接

使用INNER JOIN子句的自连接

以下示例解释了如何使用自连接进行内连接。这个查询在两个表的student_id相等且course_id不相等时返回学生id和姓名。

SELECT  s1.student_id, s1.name
FROM student s1
INNER JOIN student s2
ON s1.student_id=s2.student_id
AND s1.course_id<>s2.course_id
GROUP BY student_id;

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

MySQL 自连接

使用LEFT JOIN子句进行自连接

以下示例说明了如何使用自连接进行LEFT JOIN。当两个表的student_id相等时,此查询将返回学生姓名作为 monitor 以及所在城市。

SELECT (CONCAT(s1.stud_lname, ' ', s2.stud_fname)) AS 'Monitor', s1.city
FROM students s1
LEFT JOIN students s2 ON s1.student_id=s2.student_id
ORDER BY s1.city DESC;

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

MySQL 自连接

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程