15道常见的MySQL面试题及解析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 15道常见的MySQL面试题及解析

引言:

数据库管理系统中,MySQL是最受欢迎的关系型数据库之一。在 MySQL 的面试中,了解常见的问题和解决方法是非常重要的。本文将介绍15道常见的MySQL面试题,并提供详细的解析和答案。

正文:

01)查询" 01 “课程比” 02 "课程成绩高的学生的信息及课程分数

SELECT
  s.*,
  s1.score a,
  s2.score b 
FROM
  ( SELECT * FROM t_mysql_score WHERE cid = "01" ) s1,
  ( SELECT * FROM t_mysql_score WHERE cid = "02" ) s2,
  t_mysql_student s 
WHERE
  s1.sid = s2.sid 
  AND s1.sid = s.sid 
  AND s1.score > s2.score 
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12

02)查询同时存在 " 01 “课程和” 02 "课程的情况 SELECT

s.*,
  ( CASE WHEN s1.cid = "01" THEN s1.score END ) a,
  ( CASE WHEN s2.cid = "02" THEN s1.score END ) b 
FROM
  ( SELECT * FROM t_mysql_score WHERE cid = "01" ) s1,
  ( SELECT * FROM t_mysql_score WHERE cid = "02" ) s2,
  t_mysql_student s 
WHERE
  s1.sid = s2.sid 
  AND s1.sid = s.sid 
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10

03)查询存在 " 01 “课程但可能不存在” 02 "课程的情况 ( 不存在时显示为 NULL ) SELECT

SELECT
  s1.*,
  s2.score 
FROM
  ( SELECT * FROM t_mysql_score sc WHERE sc.cid = "01" ) s1
  LEFT JOIN ( SELECT * FROM t_mysql_score sc WHERE sc.cid = "02" ) s2 ON s1.sid = s2.sid
• 1
• 2
• 3
• 4
• 5
• 6

04)查询不存在" 01 “课程但存在” 02 "课程的情况

SELECT
  * 
FROM
  t_mysql_score s 
WHERE
  s.sid NOT IN ( SELECT sid FROM t_mysql_score WHERE cid = "01" ) 
  AND s.cid = "02"
• 1
• 2
• 3
• 4
• 5
• 6
• 7

05)查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩

SELECT
  s.sid,
  s.sname,
  avg( c.score ) 
FROM
  t_mysql_student s,
  t_mysql_score c 
WHERE
  s.sid = c.sid 
GROUP BY
  s.sid,
  s.sname 
HAVING
  avg( c.score ) >= 60
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14

06)查询在t_mysql_score表存在成绩的学生信息

SELECT
  s.* 
FROM
  t_mysql_score sc,
  t_mysql_student s 
WHERE
  sc.sid = s.sid 
GROUP BY
  s.sid
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9

07)查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null)

SELECT
  s.sid,
  s.sname,
  count( sc.cid ),
  sum( sc.score ) 
FROM
  t_mysql_student s,
  t_mysql_score sc 
WHERE
  s.sid = sc.sid 
GROUP BY
  s.sid,
  s.sname
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13

08)查询「李」姓老师的数量

SELECT
  * 
FROM
  t_mysql_teacher t 
WHERE
  tname LIKE '李%'
• 1
• 2
• 3
• 4
• 5
• 6
• 7

09)查询学过「张三」老师授课的同学的信息

SELECT
  * 
FROM
  t_mysql_student 
WHERE
  sid IN (
SELECT
  sc.sid 
FROM
  t_mysql_teacher t,
  t_mysql_score sc,
  t_mysql_course c 
WHERE
  t.tid = c.tid 
  AND sc.cid = c.cid 
  AND t.tname = "张三" 
GROUP BY
  sc.sid 
  )
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15
• 16
• 17
• 18
• 19

10)查询没有学全所有课程的同学的信息

SELECT
  s.*,
  count( sc.score ) 
FROM
  t_mysql_student s,
  t_mysql_score sc 
WHERE
  s.sid = sc.sid 
GROUP BY
  s.sid,
  s.sname 
HAVING
  count( sc.score ) < ( SELECT count( 1 ) FROM t_mysql_course )
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13

11)查询没学过"张三"老师讲授的任一门课程的学生姓名

SELECT
  sname 
FROM
  t_mysql_student 
WHERE
  sid NOT IN (
SELECT
  sc.sid 
FROM
  t_mysql_score sc,
  t_mysql_course c,
  t_mysql_teacher t 
WHERE
  t.tid = c.tid 
  AND sc.cid = c.cid 
  AND t.tname = "张三" 
  )
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15
• 16
• 17
• 18

12)查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

SELECT
  s.sid,
  s.sname,
  ROUND( AVG( sc.score ), 2 ) 
FROM
  t_mysql_student s,
  t_mysql_score sc 
WHERE
  sc.sid = s.sid 
  AND sc.score < 60 GROUP BY s.sid, s.sname HAVING count( sc.score ) >=2
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10

13)检索" 01 "课程分数小于 60,按分数降序排列的学生信息

SELECT
  s.*,
  sc.score 
FROM
  t_mysql_student s,
  t_mysql_score sc 
WHERE
  s.sid = sc.sid 
  AND sc.cid = "01" 
  AND sc.score < 60 
ORDER BY
  sc.score DESC
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12

14)按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

SELECT
  s.sid,
  s.sname,
  ROUND(AVG(sc.score),2),
  max(CASE WHEN sc.cid = "01" THEN sc.score END )语文,
  max(CASE WHEN sc.cid = "02" THEN sc.score END )数学,
  max(CASE WHEN sc.cid = "03" THEN sc.score END )英语
FROM
  t_mysql_student s,
  t_mysql_score sc 
WHERE
  s.sid = sc.sid 
GROUP BY
  s.sname,
  s.sid 
ORDER BY
  AVG( sc.score ) DESC
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15
• 16
• 17

15)查询各科成绩最高分、最低分和平均分:

以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90

要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

SELECT
  c.cid,
  c.cname,
  max( sc.score ) 最高分,
  min( sc.score ) 最低分,
  ROUND( avg( sc.score ), 2 ) 平均分,
  CONCAT(ROUND(sum( IF ( sc.score > 60, 1, 0 ))/count(sc.score)*100,2) ,'%') 及格率,
  CONCAT(ROUND(sum( IF ( sc.score >= 70 and sc.score<80, 1, 0 ))/count(sc.score)*100,2) ,'%') 中等率,
  CONCAT(ROUND(sum( IF ( sc.score >= 70 and sc.score<80, 1, 0 ))/count(sc.score)*100,2) ,'%') 优良率,
  CONCAT(ROUND(sum( IF ( sc.score >= 90 , 1, 0 ))/count(sc.score)*100,2) ,'%') 优秀
FROM
  t_mysql_student s,
  t_mysql_score sc,
  t_mysql_course c 
WHERE
  s.sid = sc.sid 
  AND c.cid = sc.cid 
GROUP BY
  c.cid,
  c.cname
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15
• 16
• 17
• 18
• 19
• 20
• 21

结尾:

通过本文,我们回顾了面试中常见的15道MySQL查询语句面试题,并提供了每个问题的简洁解答。在准备MySQL面试时,了解这些问题并熟练运用相关语句将为您赢得更多竞争优势。愿这篇博客对您的MySQL学习和面试准备有所帮助!


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
4月前
|
Web App开发 缓存 前端开发
浏览器常见面试题目及详细答案解析
本文围绕浏览器常见面试题及答案展开,深入解析浏览器组成、内核、渲染机制与缓存等核心知识点。内容涵盖浏览器的主要组成部分(如用户界面、呈现引擎、JavaScript解释器等)、主流浏览器内核及其特点、从输入URL到页面呈现的全过程,以及CSS加载对渲染的影响等。结合实际应用场景,帮助读者全面掌握浏览器工作原理,为前端开发和面试提供扎实的知识储备。
170 4
|
2月前
|
存储 SQL 关系型数据库
MySQL中binlog、redolog与undolog的不同之处解析
每个都扮演回答回溯与错误修正机构角色: BinLog像历史记载员详细记载每件大大小小事件; RedoLog则像紧急救援队伍遇见突發情況追踪最后活动轨迹尽力补救; UndoLog就类似时间机器可倒带历史让一切归位原始样貌同时兼具平行宇宙观察能让多人同时看见各自期望看见历程而互不干扰.
152 9
|
3月前
|
关系型数据库 MySQL Java
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
|
4月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
1413 48
|
3月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
|
4月前
|
前端开发 JavaScript 开发者
2025 最新 100 道 CSS 面试题及答案解析续篇
本文整理了100道CSS面试题及其答案,涵盖CSS基础与进阶知识。内容包括CSS引入方式、盒模型、选择器优先级等核心知识点,并通过按钮、卡片、导航栏等组件封装实例,讲解单一职责原则、样式隔离、响应式设计等最佳实践。适合前端开发者巩固基础、备战面试或提升组件化开发能力。资源地址:[点击下载](https://pan.quark.cn/s/50438c9ee7c0)。
107 5
2025 最新 100 道 CSS 面试题及答案解析续篇
|
4月前
|
缓存 NoSQL Java
Java Redis 面试题集锦 常见高频面试题目及解析
本文总结了Redis在Java中的核心面试题,包括数据类型操作、单线程高性能原理、键过期策略及分布式锁实现等关键内容。通过Jedis代码示例展示了String、List等数据类型的操作方法,讲解了惰性删除和定期删除相结合的过期策略,并提供了Spring Boot配置Redis过期时间的方案。文章还探讨了缓存穿透、雪崩等问题解决方案,以及基于Redis的分布式锁实现,帮助开发者全面掌握Redis在Java应用中的实践要点。
201 6
|
4月前
|
NoSQL Java 微服务
2025 年最新 Java 面试从基础到微服务实战指南全解析
《Java面试实战指南:高并发与微服务架构解析》 本文针对Java开发者提供2025版面试技术要点,涵盖高并发电商系统设计、微服务架构实现及性能优化方案。核心内容包括:1)基于Spring Cloud和云原生技术的系统架构设计;2)JWT认证、Seata分布式事务等核心模块代码实现;3)数据库查询优化与高并发处理方案,响应时间从500ms优化至80ms;4)微服务调用可靠性保障方案。文章通过实战案例展现Java最新技术栈(Java 17/Spring Boot 3.2)的应用.
230 9
|
4月前
|
设计模式 安全 Java
Java 基础知识面试题全解析之技术方案与应用实例详解
本内容结合Java 8+新特性与实际场景,涵盖函数式编程、Stream API、模块化、并发工具等技术。通过Lambda表达式、Stream集合操作、Optional空值处理、CompletableFuture异步编程等完整示例代码,助你掌握现代Java应用开发。附面试题解析与技术方案,提升实战能力。代码示例涵盖计算器、员工信息统计、用户查询、模块化系统设计等,助你轻松应对技术挑战。
104 9
|
3月前
|
存储 SQL 关系型数据库
MySQL 核心知识与性能优化全解析
我整理的这份内容涵盖了 MySQL 诸多核心知识。包括查询语句的书写与执行顺序,多表查询的连接方式及内、外连接的区别。还讲了 CHAR 和 VARCHAR 的差异,索引的类型、底层结构、聚簇与非聚簇之分,以及回表查询、覆盖索引、左前缀原则和索引失效情形,还有建索引的取舍。对比了 MyISAM 和 InnoDB 存储引擎的不同,提及性能优化的多方面方法,以及超大分页处理、慢查询定位与分析等,最后提到了锁和分库分表可参考相关资料。

推荐镜像

更多