自连接(Self-Join)是SQL中的一种连接方式,它允许一个表与自身进行连接。以下是一些自连接的常见应用场景:
SELECT e1.name AS Employee, e2.name AS Manager
FROM Employees e1
JOIN Employees e2 ON e1.manager_id = e2.id;
WITH RECURSIVE OrgTree AS (
SELECT id, name, parent_id, 1 AS level
FROM Departments
WHERE parent_id IS NULL
UNION ALL
SELECT d.id, d.name, d.parent_id, ot.level + 1
FROM Departments d
INNER JOIN OrgTree ot ON d.parent_id = ot.id
)
SELECT * FROM OrgTree;
SELECT name, sales
FROM Employees e1
WHERE sales = (SELECT MAX(sales) FROM Employees)
OR sales = (SELECT MIN(sales) FROM Employees);
SELECT d.name, SUM(e.sales) AS TotalSales
FROM Departments d
JOIN Employees e ON d.id = e.department_id
GROUP BY d.name;
SELECT od1.order_id, od1.product_id, od2.product_name
FROM OrderDetails od1
JOIN Products od2 ON od1.product_id = od2.id;
SELECT u1.username AS User, u2.username AS Friend
FROM Users u1
JOIN Friendships f ON u1.id = f.user_id
JOIN Users u2 ON f.friend_id = u2.id;
SELECT e.name, MAX(s.sales_date) AS LastSaleDate, MAX(s.amount) AS MaxSaleAmount
FROM Employees e
JOIN Sales s ON e.id = s.employee_id
WHERE s.sale_date >= DATEADD(year, -1, GETDATE())
GROUP BY e.name;
通过合理运用自连接,可以有效地解决许多复杂的数据查询问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。