Self Join(自连接)是一种在SQL查询中使用的技巧,它允许一个表与自身进行连接。通过自连接,可以在同一个表中查找满足特定条件的记录对。以下是Self Join可以解决的一些问题:
SELECT e1.employee_name AS Employee, e2.employee_name AS Manager
FROM Employees e1
JOIN Employees e2 ON e1.manager_id = e2.employee_id;
SELECT e.employee_name, e.department_id, e.sales
FROM Employees e
JOIN (
SELECT department_id, AVG(sales) AS avg_sales
FROM Employees
GROUP BY department_id
) dept_avg ON e.department_id = dept_avg.department_id
WHERE e.sales > dept_avg.avg_sales;
-- 查找直接上级
SELECT e.employee_name AS Employee, m.employee_name AS Manager
FROM Employees e
JOIN Employees m ON e.manager_id = m.employee_id;
-- 查找直接下级
SELECT m.employee_name AS Manager, e.employee_name AS Employee
FROM Employees m
JOIN Employees e ON m.employee_id = e.manager_id;
SELECT s.student_name
FROM Enrollments e1
JOIN Enrollments e2 ON e1.student_id = e2.student_id
JOIN Courses c ON e1.course_id = c.course_id AND e2.course_id = c.course_id
WHERE c.course_name IN ('Math', 'Science');
SELECT order_number, COUNT(*)
FROM Orders
GROUP BY order_number
HAVING COUNT(*) > 1;
WITH SalesRank AS (
SELECT salesperson_id, SUM(amount) AS total_sales,
RANK() OVER (ORDER BY SUM(amount) DESC) AS rank
FROM Sales
GROUP BY salesperson_id
)
SELECT salesperson_id, total_sales, rank
FROM SalesRank
WHERE rank <= 5;
总之,Self Join是一种强大的工具,可以帮助解决许多涉及同一表内数据关系的复杂查询问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。