SQL面试题

1.MyISAM与InnoDB区别?(4点)

2.什么是字符集与校对规则?

3.MySQL索引使用的数据结构?

4.两种存储引擎的索引实现方式?

5.什么是查询缓存?

6.什么是事务?

7.事务的四大特性?

8.并发事务带来的问题?(4点)不可重复度和幻读区别?

9.SQL 标准定义了四个隔离级别?

10.MyISAM和InnoDB存储引擎使用的锁?

11.表级锁和行级锁对比?

12.对于大表优化举措?(4点)

答案:https://snailclimb.gitee.io/javaguide/#/database/MySQL


 

答案:https://www.cnblogs.com/wenxiaofei/p/9853682.html

### SQL 面试题及答案解析 以下是几个常见的 SQL 面试题及其解答: #### 1. 查询每个同学的姓名、选课数以及总成绩 为了实现这一需求,可以利用 `GROUP BY` 和聚合函数来统计每位学生的信息。具体查询语句如下: ```sql SELECT b.s_name AS 姓名, COUNT(a.c_id) AS 选课数, SUM(a.score) AS 总成绩 FROM score a LEFT JOIN student b ON a.s_id = b.s_id GROUP BY b.s_name; ``` 此查询通过连接 `score` 表和 `student` 表,并按学生分组计算其选课数量和总成绩[^1]。 --- #### 2. 查询订单表中的第 21 至 30 条记录(假设每页显示 10 条) 对于分页查询,在 MySQL 或 PostgreSQL 中可以通过 `LIMIT` 和 `OFFSET` 实现。示例如下: ```sql SELECT * FROM orders ORDER BY order_date DESC LIMIT 10 OFFSET 20; ``` 该查询按照 `order_date` 字段降序排列并提取指定范围内的记录[^2]。 --- #### 3. 查找仅选修一门课程的学生学号和姓名 要筛选出只选修了一门课程的学生,可借助 `HAVING` 子句配合 `COUNT()` 函数完成。代码如下: ```sql SELECT b.s_name AS 姓名, a.sid AS 学号 FROM sc a JOIN student b ON a.sid = b.s_id GROUP BY a.sid, b.s_name HAVING COUNT(a.cid) = 1; ``` 这里先对 `sc` 表进行分组操作,再过滤掉不符合条件的数据项[^3]。 --- #### 4. 使用递归 CTE 获取组织结构树形列表 当面对层次化数据存储时(如部门隶属关系),推荐采用 Common Table Expressions (CTEs),即公共表达式技术来进行处理。下面是一个简单的例子展示如何构建员工上下级链路图谱: ```sql WITH RECURSIVE cte_employee AS ( SELECT id, name, manager_id FROM employees WHERE manager_id IS NULL UNION ALL SELECT e.id, e.name, e.manager_id FROM employees e INNER JOIN cte_employee ce ON e.manager_id = ce.id ) SELECT * FROM cte_employee; ``` --- #### 5. 统计各科目的平均分数 如果希望了解不同科目之间的表现差异,则可通过以下方式获取相应统计数据: ```sql SELECT c_id AS 科目编号, AVG(score) AS 平均分 FROM score GROUP BY c_id; ``` --- ### 注意事项 以上提供的解决方案基于标准 SQL 语法编写而成;然而实际部署过程中可能因数据库管理系统(DBMS)版本特性而有所调整,请务必参照目标环境文档确认兼容性情况后再执行脚本文件内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值