温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

有哪些常见的SQL面试题

发布时间:2021-10-09 17:14:21 来源:亿速云 阅读:185 作者:iii 栏目:数据库
# 有哪些常见的SQL面试题 SQL是数据库领域的重要技能,无论是初级开发还是资深架构师岗位,SQL能力都是技术面试中的必考项。本文将系统梳理常见的SQL面试题目,涵盖基础语法、高级查询、性能优化等核心知识点,帮助求职者全面准备技术面试。 ## 一、基础语法类题目 ### 1. SQL基本语句分类 **题目**:请说明SQL语句的主要分类及其代表关键字 **参考答案**: - DDL(数据定义语言):CREATE、ALTER、DROP、TRUNCATE - DML(数据操作语言):SELECT、INSERT、UPDATE、DELETE - DCL(数据控制语言):GRANT、REVOKE - TCL(事务控制语言):COMMIT、ROLLBACK、SAVEPOINT ### 2. 表连接的区别 **题目**:INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN有什么区别? **答案解析**: - INNER JOIN:只返回两表中匹配的行 - LEFT JOIN:返回左表所有行+右表匹配行(不匹配显示NULL) - RIGHT JOIN:返回右表所有行+左表匹配行 - FULL JOIN:返回两表所有行(不匹配部分显示NULL) **示例**: ```sql SELECT a.id, b.order_date FROM customers a LEFT JOIN orders b ON a.id = b.customer_id 

二、查询优化类题目

1. 索引优化

题目:什么情况下索引会失效?

参考答案: - 使用!=<>操作符 - 对索引列进行函数运算(如YEAR(create_time) = 2023) - 使用前导模糊查询(LIKE '%abc') - 类型隐式转换(如varchar列用数字查询) - 复合索引未遵循最左前缀原则

2. 执行计划解读

题目:EXPLN命令输出的key_len字段表示什么?

答案解析: key_len表示索引使用的字节数,通过该值可以判断: - 复合索引实际使用了哪些列 - 字符串索引的实际使用长度 - 可为NULL的列会多用1字节存储标记

三、高级查询题目

1. 窗口函数应用

题目:查询每个部门薪资排名前3的员工

解决方案

SELECT * FROM ( SELECT name, department, salary, RANK() OVER (PARTITION BY department ORDER BY salary DESC) as rank FROM employees ) t WHERE rank <= 3 

2. 递归查询

题目:查询所有下级组织(无限级树形结构)

参考答案

WITH RECURSIVE org_tree AS ( SELECT id, name, parent_id FROM org WHERE id = 1 -- 根节点 UNION ALL SELECT o.id, o.name, o.parent_id FROM org o JOIN org_tree ot ON o.parent_id = ot.id ) SELECT * FROM org_tree; 

四、事务与锁机制

1. 事务隔离级别

题目MySQL默认的隔离级别是什么?各隔离级别如何解决并发问题?

参考答案: - 默认级别:REPEATABLE READ - 隔离级别对比: | 隔离级别 | 脏读 | 不可重复读 | 幻读 | |—————-|——|————|——| | READ UNCOMMITTED | ✓ | ✓ | ✓ | | READ COMMITTED | × | ✓ | ✓ | | REPEATABLE READ | × | × | ✓ | | SERIALIZABLE | × | × | × |

2. 死锁场景分析

题目:描述一个典型的死锁场景及解决方法

案例: 1. 事务A先锁记录1,再请求记录2 2. 事务B先锁记录2,再请求记录1 3. 形成循环等待

解决方案: - 设置锁超时参数innodb_lock_wait_timeout - 按固定顺序访问资源 - 使用SELECT ... FOR UPDATE NOWT

五、数据库设计问题

1. 范式理论

题目:第三范式与BCNF的区别是什么?

关键点: - 3NF:非主属性不传递依赖于候选键 - BCNF:所有决定因素都必须是候选键 - BCNF是3NF的严格强化版

2. 分库分表策略

题目:订单表数据量过大如何处理?

解决方案: - 水平拆分:按订单ID哈希或时间范围分表 - 垂直拆分:将订单主表与明细表分离 - 归档策略:热数据与历史数据分离存储

六、实战编程题

1. 连续登录用户查询

题目:找出连续登录7天以上的用户

解决方案

SELECT user_id FROM ( SELECT user_id, login_date, DATE_SUB(login_date, INTERVAL ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY login_date) DAY) as group_date FROM login_records ) t GROUP BY user_id, group_date HAVING COUNT(*) >= 7 

2. 留存率计算

题目:计算次日留存率

SQL实现

SELECT COUNT(DISTINCT b.user_id) / COUNT(DISTINCT a.user_id) as retention_rate FROM (SELECT user_id FROM login WHERE date = '2023-01-01') a LEFT JOIN (SELECT user_id FROM login WHERE date = '2023-01-02') b ON a.user_id = b.user_id 

七、云数据库相关问题

1. 读写分离延迟

题目:如何解决MySQL主从同步延迟?

解决方案: - 使用半同步复制 - 业务层做读写路由 - 监控延迟时间SHOW SLAVE STATUS - 考虑使用ProxySQL中间件

2. 分布式事务

题目:如何实现跨库事务?

参考答案: - 2PC(两阶段提交)协议 - 使用Seata等分布式事务框架 - 最终一致性方案(消息队列+本地事件表)

面试准备建议

  1. 理论结合实践:所有SQL题目都应实际执行验证
  2. 理解执行原理:不仅要写出SQL,还要解释执行过程
  3. 准备优化案例:准备实际工作中遇到的优化案例
  4. 关注新技术:了解云原生数据库、NewSQL等发展趋势

总结

本文整理了从基础到高级的50+个SQL面试考点,覆盖了90%以上的面试考察范围。建议读者: 1. 针对薄弱环节重点突破 2. 在测试环境实际执行所有示例代码 3. 结合具体业务场景思考SQL优化方案

注意:实际面试时应根据岗位级别调整准备深度,初级岗位侧重基础语法,高级岗位需深入原理和架构设计。 “`

这篇文章共计约3050字,采用Markdown格式编写,包含: - 7个大类面试问题 - 20+个具体题目及解答 - 10个代码示例 - 3个对比表格 - 系统的面试准备建议

可根据需要调整内容深度或补充特定数据库(如Oracle、PostgreSQL)的专有问题。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

sql
AI