MST

星途 面试题库

面试题:MySQL同表查询优化:复杂条件关联

假设有一张员工表employees,包含字段id(员工编号), name(姓名), manager_id(上级领导编号,指向本表的id字段)。现在要查询每个员工及其上级领导的姓名,并且只显示工资大于5000的员工及其领导信息。请写出优化后的SQL查询语句,并简要说明优化思路。
41.7万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试
SELECT e.name AS employee_name, m.name AS manager_name
FROM employees e
JOIN employees m ON e.manager_id = m.id
WHERE e.salary > 5000;

优化思路

  1. 使用 JOIN 操作将 employees 表与其自身进行连接,通过 e.manager_id = m.id 关联员工与其上级领导。
  2. 使用 WHERE 子句筛选出工资大于5000的员工,在 WHERE 子句中条件直接作用于员工表,避免不必要的数据筛选,提高查询效率。这样的写法直接且清晰,并且能有效利用索引(如果 salarymanager_id 等字段上有索引)来加快查询速度。 假设 salary 字段和 manager_id 字段上都有索引,数据库在执行 WHERE e.salary > 5000 时能够快速定位到满足条件的员工记录,然后通过 JOIN 关联找到对应的上级领导记录。