摘要:本教程展示了如何通过使用 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
表。

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)

总裁没有经理。在包含总裁的行中的 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)

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