“自连接(Self Join)”和“子查询(Subquery)”哪个好,不能一概而论,要看语义清晰度、性能、数据库类型、数据量等因素。下面从几个角度对比说明。
JOIN 关联SELECT / WHERE / FROM 中嵌套另一个查询例如:找“比自己部门平均薪资高的员工”
SELECT e1.*
FROM emp e1
JOIN (
SELECT deptno, AVG(sal) avg_sal
FROM emp
GROUP BY deptno
) e2 ON e1.deptno = e2.deptno
WHERE e1.sal > e2.avg_sal;
SELECT *
FROM emp e
WHERE sal > (
SELECT AVG(sal)
FROM emp
WHERE deptno = e.deptno
);
EXISTS)现代数据库(MySQL 8、PostgreSQL、Oracle)很多会把子查询自动优化成 JOIN
✅ 结构清晰
✅ 容易优化
❌ 表别名多,初看有点绕
✅ 语义直观(“找比平均高的”)
❌ 嵌套深了很难读
❌ 相关子查询难调试
IN / NOT IN / EXISTS性能优先 → 自连接(或 JOIN)
逻辑简单、可读优先 → 子查询
大表相关子查询 → 尽量改成 JOIN
如果你有具体 SQL 或业务场景,我可以直接帮你判断哪种更合适、怎么写最快。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。