1. 力扣高频SQL 50题阶段总结(一):数据库面试必备技能精要
作为数据从业者,SQL能力是职场生存的基本功。最近系统刷完了力扣高频SQL 50题的前25道,这些题目基本覆盖了90%的日常业务场景和面试考点。今天就来分享下这个阶段的实战心得,特别适合准备数据库面试或想系统提升SQL能力的朋友参考。
2. 高频SQL题型分类解析
2.1 基础查询与条件筛选
这类题目看似简单但暗藏玄机,主要考察WHERE子句的灵活运用:
sql复制-- 典型例题:查找2019年春季的所有订单
SELECT * FROM orders
WHERE order_date BETWEEN '2019-03-01' AND '2019-05-31'
关键点:日期范围查询要特别注意边界条件,BETWEEN是闭区间包含两端点
2.2 聚合函数与分组统计
几乎每场面试都会遇到的考点:
sql复制-- 统计每个部门的平均薪资(保留2位小数)
SELECT
department_id,
ROUND(AVG(salary), 2) AS avg_salary
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 5 -- 只显示员工数大于5的部门
易错点:WHERE过滤行,HAVING过滤组,这个区别面试必问
2.3 多表连接查询
实际业务中最常用的操作,主要有三种连接方式:
- 内连接(默认JOIN)
- 左外连接(LEFT JOIN)
- 全外连接(FULL JOIN)
sql复制-- 查询所有员工及其部门名称(包括未分配部门的员工)
SELECT e.employee_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id
3. 解题技巧与优化策略
3.1 执行计划分析
遇到性能问题时,EXPLAIN是你的最佳工具:
sql复制EXPLAIN ANALYZE
SELECT * FROM large_table WHERE create_date > '2023-01-01'
关键指标关注:
- 扫描类型(全表扫描vs索引扫描)
- 预估行数vs实际行数
- 排序和聚合操作的成本
3.2 索引优化实战
针对高频查询字段建立合适索引:
sql复制-- 为日期范围查询添加索引
CREATE INDEX idx_create_date ON orders(create_date)
-- 复合索引遵循最左前缀原则
CREATE INDEX idx_dept_status ON employees(department_id, status)
经验:索引不是越多越好,写密集场景要谨慎
4. 常见陷阱与避坑指南
4.1 NULL值处理
SQL中NULL的特殊性经常导致意外结果:
sql复制-- 错误示例:这样查不到recommender_id为NULL的记录
SELECT * FROM users WHERE recommender_id = NULL
-- 正确写法
SELECT * FROM users WHERE recommender_id IS NULL
4.2 隐式类型转换
字符串与数字比较时的坑:
sql复制-- 假设employee_id是字符串类型
SELECT * FROM employees WHERE employee_id = 100 -- 会导致全表扫描
-- 应该写成
SELECT * FROM employees WHERE employee_id = '100'
5. 进阶挑战:窗口函数应用
窗口函数是SQL高级特性的分水岭:
sql复制-- 计算每个部门薪资排名
SELECT
employee_name,
department_id,
salary,
RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS dept_rank
FROM employees
典型应用场景:
- 计算移动平均值
- 生成连续编号
- 计算同比环比
6. 实战建议与学习路径
- 建议每天保持2-3题的刷题节奏
- 每道题至少尝试两种解法
- 建立错题本记录特殊案例
- 实际业务中多思考SQL优化可能
我个人在刷题过程中发现,很多看似复杂的业务问题,拆解后都是这些基础操作的组合。掌握这50题的核心套路,面对实际工作中的SQL需求就能游刃有余了。
