SQL 自连接(Self JOIN)

在 SQL 中,自 连接 (JOIN) 操作允许我们将表与其自身连接,从而在同一表内的行之间创建关系。

示例

SELECT
    A.first_name AS FirstPerson,
    B.first_name AS SecondPerson
FROM Customers A, Customers B
WHERE A.last_name = B.last_name AND A.first_name != B.first_name;

在这里,SQL 命令将 Customers 表与自身连接,并找出具有相同姓氏但名字不同的客户对。


自连接(Self JOIN)语法

JOIN 操作的基本语法如下:

SELECT columns
FROM table1 T1,
JOIN table1 T2 ON 
WHERE condition;

这里,

  • columns - 指定我们要检索的列
  • table1 T1table1 T2 - 同一个表 table1 的两个实例 T1T2
  • JOIN - 连接两个表,通常后跟一个 ON 命令,该命令指定用于链接两个表的公共列。
  • condition - 指定如何连接同一个表的两个实例的条件

示例:SQL 自连接(Self JOIN)

-- retrieve Customers with the Same Country and Different Customer IDs

SELECT
    c1.first_name,
    c1.country,
    c2.first_name 
FROM Customers c1
JOIN Customers c2 ON c1.country = c2.country
WHERE c1.customer_id <> c2.customer_id;

在这里,SQL 命令对 Customers 表使用自连接来查找具有相同国家但不同客户 ID 的客户。

WHERE 子句过滤结果并确保来自 Customers 表的两个实例(c1c2)的客户 ID 不同。


带 AS 别名的 SQL 自连接(Self JOIN)

我们可以将 AS 别名与表名一起使用,使查询简短明了。例如,

-- retrieve Customers with the same Country and Different Customer IDs
-- use AS alias for better code readability

SELECT
    c1.first_name,
    c1.country,
    c2.first_name AS friend_name
FROM Customers c1
JOIN Customers c2 ON c1.country = c2.country
WHERE c1.customer_id <> c2.customer_id;

在这里,SQL 命令使用别名 friend_name 来重命名 Customers 表的第二个实例 c2 中的 first_name 列。

此别名明确表示我们指的是共享同一国家的另一个客户的名字。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战