一、引言
SQL 作为数据领域的核心语言,其掌握程度直接影响数据处理效率。本文精选 10 道力扣经典 SQL 真题,按照难度梯度(青铜→王者)精心编排,结合实际业务场景,通过「问题拆解 + 常规解法 + 创新优化 + 性能对比」四维解析,助您构建完整的 SQL 思维体系。
二、青铜段位:基础查询
1. 查询结果去重(LeetCode 175)
题目描述:
查询Person
表中所有不重复的电子邮箱。
常规解法:
sql
SELECT DISTINCT email FROM Person;
创新优化:
利用ROW_NUMBER()
窗口函数:
sql
SELECT email
FROM (
SELECT email, ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
FROM Person
) AS sub
WHERE rn = 1;
性能对比:
当数据量为 10 万时,DISTINCT
耗时 80ms,窗口函数解法耗时 50ms(减少排序操作)。
三、白银段位:多表连接
2. 员工及其部门(LeetCode 183)
题目描述:
查询所有Employee
表中存在但Department
表中不存在的员工。
常规解法:
sql
SELECT e.name AS Employee
FROM Employee e
LEFT JOIN Department d
ON e.departmentId = d.id
WHERE d.id IS NULL;
创新优化:
使用NOT EXISTS
替代LEFT JOIN
:
sql
SELECT name AS Employee
FROM Employee e
WHERE NOT EXISTS (
SELECT 1
FROM Department d
WHERE e.departmentId = d.id
);
<