MySQL系列(三)之15道常见笔试题

简介: MySQL系列(三)之15道常见笔试题

前言

数据库的考察在面试时可是十分常见的,MySQL作为一种常用的关系型数据库管理系统,对于它的介绍在面试时可是必不可少的,下面就是一些常见笔试题的模拟,希望可以帮助到你🙂🙂

所用到的表如下:

学生表(t_mysql_student)

有学生ID(sid),学生姓名(sname),学生年龄(sage),学生性别(ssex)

教师表(t_mysql_teacher)

教师编号(tid),教师姓名(tname)

课程表(t_mysql_course)

课程编号(cid),课程名称(cname),教师编号(tid外键)

成绩表(t_mysql_score)

学生编号(sid外键),课程编号(cid外键),学生成绩(score)

1. 查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数

select s.*,t1.score 01课程分数,t2.score 02课程分数 from  
(select *from t_mysql_score where cid='01')t1,
(select *from t_mysql_score where cid='02')t2,
t_mysql_student s
where s.sid=t1.sid and s.sid=t2.sid
and t1.score>t2.score

2. 查询同时存在" 01 "课程和" 02 "课程的情况

select s.*,t1.score 01课程分数,t2.score 02课程分数 from 
(select * from t_mysql_score where cid='01')t1,
(select * from t_mysql_score where cid='02')t2,
t_mysql_student s
where s.sid=t1.sid and s.sid=t2.sid

3. 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )

select t1.*,t2.score 02课程 from 
(select *from t_mysql_score where cid='01')t1 left join 
(select *from t_mysql_score where cid='02')t2 on
t1.sid=t2.sid

4. 查询不存在" 01 "课程但存在" 02 "课程的情况

select *from t_mysql_score s where s.sid not in
(select sid from t_mysql_score where cid='01')
and cid='02'

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

select 
s.sid,s.sname,ROUND(AVG(sc.score)) 平均成绩
from
t_mysql_student s,t_mysql_score sc
where s.sid=sc.sid
GROUP BY
s.sid,s.sname
HAVING
平均成绩>60

6. 查询在t_mysql_score表存在成绩的学生信息

select *from t_mysql_student where sid in 
(select sid from t_mysql_score GROUP BY sid )

7. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 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

8. 查询「李」姓老师的数量

select count(*) from t_mysql_teacher where tname like '李%'

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

select 
s.*,t.tname
from
t_mysql_student s,t_mysql_teacher t,t_mysql_course c,t_mysql_score sc
where 
s.sid=sc.sid and t.tid=c.tid and c.cid=sc.cid
and tname='张三'

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

select 
s.sid,s.sname,count(sc.cid) 课程总数
from
t_mysql_student s,t_mysql_score sc
where s.sid=sc.sid
GROUP BY
s.sid,s.sname
HAVING
课程总数<(select count(1) from t_mysql_course)

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

select s.* from t_mysql_student s where s.sid not in (
select
sc.sid
from
t_mysql_teacher t,t_mysql_course c,t_mysql_score sc
where t.tid=c.tid and c.cid=sc.cid
and t.tname='张三'
GROUP BY
sc.sid)

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

SELECT
s.sid,s.sname,ROUND(AVG(sc.score)) 平均成绩,COUNT(sc.cid) 课程总数
FROM
t_mysql_student s,t_mysql_score sc
WHERE
s.sid=sc.sid and sc.score<60
GROUP BY
s.sid,s.sname
HAVING
课程总数>=2

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

SELECT
s.*
FROM
t_mysql_score sc,t_mysql_student s
WHERE
sc.sid=s.sid and sc.score<60 and cid='01'
ORDER BY sc.score DESC

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_score sc,t_mysql_student s,t_mysql_course c
WHERE
 sc.sid=s.sid and sc.cid=c.cid
GROUP BY
s.sid,s.sname
ORDER BY 平均成绩 desc

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

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

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

SELECT
c.cid,c.cname,max(sc.score)最高分,
min(sc.score)最低分,
ROUND(AVG(sc.score))平均分,
count(sc.score)选修人数,
CONCAT(ROUND(sum(if(sc.score>=60,1,0))/count(sc.score)*100),'%')及格率,
CONCAT(ROUND(sum(if(sc.score>=70 and sc.score<80,1,0))/count(sc.score)*100),'%')中等率,
CONCAT(ROUND(sum(if(sc.score>=80 and sc.score<90,1,0))/count(sc.score)*100),'%')优良率,
CONCAT(ROUND(sum(if(sc.score>=90,1,0))/count(sc.score)*100),'%')优秀率
FROM
t_mysql_score sc,t_mysql_course c,t_mysql_student s
WHERE
sc.sid=s.sid and sc.cid=c.cid
GROUP BY
c.cid,c.cname
ORDER BY
选修人数 desc,
c.cid

CASE函数的详解

在MySQL数据库中,CASE函数是一种条件表达式函数,它允许根据条件的结果返回不同的值。CASE函数有两种形式:简单CASE表达式和搜索CASE表达式。

1. 简单CASE表达式:

简单CASE表达式用于对单个表达式进行多个条件的比较,语法如下:

CASE expression
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ...
    ELSE result
END

expression是需要进行比较的表达式(是可以省略的),value1、value2等是待比较的值,result1、result2等是满足条件时返回的结果,ELSE子句用于指定当没有条件匹配时的默认结果(也是可以省略的)。

用上面的第14题举例

case when sc.cid='01' then sc.score end

  • case后面的表达式和else后面的子句都进行了省略
  • sc.cid='01'是需要被比较的值,当它成立时,便输出sc.score

2. 搜索CASE表达式:

搜索CASE表达式用于根据多个条件进行比较,并返回满足条件的第一个结果。它的语法如下:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE result
END

condition1、condition2等是待比较的条件表达式,result1、result2等是满足条件时返回的结果,ELSE子句用于指定当没有条件匹配时的默认结果。

总结而言,CASE函数在MySQL数据库中用于根据条件返回不同的值。简单CASE表达式适用于对单个表达式进行多个条件比较,而搜索CASE表达式适用于根据多个条件进行比较。它们可以在SELECT语句中使用,并且可以与其他函数和条件表达式组合使用。

if函数详解

MySQL数据库中的IF函数是一个条件表达式函数,它允许根据条件的结果返回不同的值。IF函数的语法如下:

IF(condition, value_if_true, value_if_false)

condition是一个布尔表达式或条件,value_if_true是当条件为真时返回的值,value_if_false是当条件为假时返回的值。

用上面的第15题举例

if(sc.score>=60,1,0)

如果sc.score大于60分,就输出1,否则就输出0

总结而言,IF函数在MySQL数据库中用于根据条件返回不同的值,它可以在SELECT、INSERT、UPDATE等语句中使用,并且可以与其他函数和运算符组合使用。

一起进步吧!!!✌✌✌

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
9月前
|
存储 缓存 安全
针对Java集合框架的面试题有哪些
Java集合框架是面试重点,涵盖List、Set、Map等接口及其实现类的底层结构、线程安全、性能对比。常见问题包括ArrayList与LinkedList区别、HashMap原理、ConcurrentHashMap线程安全机制、HashSet去重逻辑等,需结合源码深入理解核心方法与设计思想。
515 3
|
安全 关系型数据库 MySQL
Linux(CentOS6)安装MySQL5.6
Linux(CentOS 6)系统上安装MySQL 5.6版本的详细步骤,包括准备数据存放目录、创建用户、下载安装包、初始化数据库、配置服务脚本、设置环境变量等操作。
1071 1
|
存储 缓存 前端开发
如何优化 SSR 应用以减少服务器压力
优化SSR应用以减少服务器压力,可采用代码分割、缓存策略、数据预加载、服务端性能优化、使用CDN、SSR与SSG结合、限制并发请求、SSR与CSR平滑切换、优化前端资源及利用框架特性等策略。这些方法能有效提升性能和稳定性,同时保证用户体验。
626 4
|
10月前
|
存储 消息中间件 NoSQL
【Redis】常用数据结构之List篇:从常用命令到典型使用场景
本文将系统探讨 Redis List 的核心特性、完整命令体系、底层存储实现以及典型实践场景,为读者构建从理论到应用的完整认知框架,助力开发者在实际业务中高效运用这一数据结构解决问题。
|
机器学习/深度学习 自然语言处理 语音技术
《探秘卷积神经网络:权重共享与局部连接的神奇力量》
卷积神经网络(CNN)中的权重共享和局部连接是其核心特性。权重共享通过同一卷积核在不同位置使用相同权重,减少参数量并提高泛化能力;局部连接则使每个神经元仅与输入的局部区域相连,专注于提取局部特征。两者相辅相成,显著降低计算复杂度,增强对空间结构的感知,使CNN在图像识别等领域表现出色。
1209 8
|
人工智能 安全 Go
go快速上手:golang中的反射
本文深入解析Go语言反射机制,涵盖reflect包的核心类型与操作方法,通过实例演示如何动态获取类型信息、修改值及调用方法,并探讨反射的高级用法与注意事项,帮助开发者合理高效地使用反射。
473 1
|
Java Spring
SpringBoot2.7.18拦截器失效不起作用
本文记录了作者在配置Spring Boot项目中的拦截器时遇到的问题。通过复制和修改其他项目的拦截器代码,但发现拦截器始终不生效。最终发现问题出在`WebConfig.java`中配置路径模式的方式上,即在已设置`context-path`的情况下,不应再使用`addPathPatterns(contextPath + &quot;/**&quot;)`。文章提供了详细的配置文件和代码示例,帮助读者理解并避免类似问题。
1204 0
|
Java 开发者 Spring
springboot DDD的概念以及实战
【5月更文挑战第15天】领域驱动设计(Domain-Driven Design,简称DDD)是一种软件设计方法论,它强调基于业务领域的复杂性来构建软件
1596 2
|
前端开发 JavaScript 数据可视化
前端vite+vue3——自动化配置路由布局
前端vite+vue3——自动化配置路由布局
557 0
|
SQL 关系型数据库 MySQL
MySQL基础练习题(含详细答案)
MySQL基础练习题(含详细答案)
1310 1