SQL 自连接

摘要:本教程展示了如何通过使用 SQL 自连接技术将表连接到它本身。

SQL 自连接简介

有时,将表连接到它本身很有用。这种类型的连接称为自连接。

我们通过将表连接到它本身来评估同张表中其他行中的行。要执行自连接,我们使用 内部连接左连接 子句。

因为同张表会在单个查询中出现两次,所以我们必须使用表别名。以下语句演示了如何将表连接到它本身。

SELECT
	column1,
	column2,
	column3,
        ...
FROM
	table1 A
INNER JOIN table1 B ON B.column1 = A.column2;Code language: SQL (Structured Query Language) (sql)

该语句使用 内部连接 子句将表 1 连接到它本身。A 和 B 是表 1 的表别名。B.column1 = A.column2 是连接条件。

除了内部连接子句以外,你可以使用 左连接 子句。

让我们举几个使用自连接技术的例子。

SQL 自连接示例

请参阅以下 employees 表。

employees_table

manager_id 列指定了员工的经理。以下语句将 employees 表连接到它本身,以查询向谁汇报信息。

SELECT 
    e.first_name || ' ' || e.last_name AS employee,
    m.first_name || ' ' || m.last_name AS manager
FROM
    employees e
        INNER JOIN
    employees m ON m.employee_id = e.manager_id
ORDER BY manager;Code language: SQL (Structured Query Language) (sql)

试一试

SQL Self-join example

总裁没有经理。在包含总裁的行中的 employees 表中,manager_id 为 NULL。

因为内部连接子句仅包含在另一张表中有匹配行的行,所以总裁不会显示在上述查询的结果集中。

要将总裁包括在结果集中,像以下查询那样使用左连接子句,而不是内部连接子句。

SELECT 
    e.first_name || ' ' || e.last_name AS employee,
    m.first_name || ' ' || m.last_name AS manager
FROM
    employees e
        LEFT JOIN
    employees m ON m.employee_id = e.manager_id
ORDER BY manager;Code language: SQL (Structured Query Language) (sql)

试一试

SQL self-join with LEFT JOIN example

在本教程中,你学习了如何使用内部连接或左连接子句将表连接到它本身。

本教程是否有用?