MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL SELF JOIN

SELF JOIN是一种联接,用于通过 自身联接表。在前面的部分中,我们学习了使用不同的JOINS(例如INNER,LEFT,RIGHT和CROSS JOIN)将表与其他表连接起来的方法。但是,需要将数据与同一表本身中的其他数据合并。在这种情况下,我们将使用"自助联接"。
我们可以使用 表别名执行自助联接。表别名使我们不能在单个语句中两次使用相同的表名。如果我们在没有表别名的单个查询中多次使用同一个表名,则会抛出错误。
表别名使我们能够使用 临时名称我们将在查询中使用的表。让我们通过以下解释来了解表别名。
假设我们有一个名为 "student"的表,该表将在单个查询中使用两次。要为学生表起别名,我们可以将其写为:
Select … FROM student AS S1 
INNER JOIN student AS S2;

SELF JOIN语法

自联接的语法与联接两个不同表的语法相同。在这里,我们为表使用别名,因为两个表名称相同。以下是MySQL中SELF JOIN的语法:
SELECT s1.col_name, s2.col_name...
FROM table1 s1, table1 s2
WHERE s1.common_col_name = s2.common_col_name;
注意: 您还可以根据需要使用其他条件代替WHERE子句。

SELF JOIN示例

让我们在包含以下数据的数据库中创建表 "student" :
MySQL SELF Join
现在,我们将获得所有结果(student_id和名称)从 student_id 等于,而 course_id 不相等的表中。执行以下查询以了解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 SELF Join

使用INNER JOIN子句进行SELF 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 SELF Join

使用LEFT JOIN子句进行SELF JOIN

以下示例说明了如何将LEFT Join与Self 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 SELF Join
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4