MySQL[常见的面试题]

**前言:**MySQL是一种流行的开源关系型数据库管理系统(RDBMS),最初由瑞典公司MySQL AB开发。它是一种轻量级、快速且易于使用的数据库系统,适用于各种规模的应用程序。

历史:

  • MySQL最初于1994年由Michael Widenius和David Axmark开发,并在1995年首次发布。
  • 在之后的发展中,MySQL获得了广泛的用户群和社区支持,成为最受欢迎的开源数据库之一。
  • 2008年,Sun Microsystems收购了MySQL AB。随后,Sun被Oracle收购,使得MySQL成为Oracle Corporation旗下的产品。
  • MySQL在发展历程中经历了多个版本迭代,不断增强功能并改善性能。

MySQL以其易用性、可靠性和可扩展性成为许多Web应用、企业应用和小型应用的首选数据库系统。它被广泛应用于Web开发、数据分析、电子商务和许多其他领域。MySQL的持续发展和社区支持使其成为数据库管理系统领域的重要参与者之一。

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

**涉及表:**t_mysql_student , t_mysql_score

**连接方式:**内连接

**行转列:**流程控制函数

复制代码
SELECT
    s.*,
    ( CASE WHEN t1.cid = '01' THEN t1.score END ) 语文,
    ( CASE WHEN t2.cid = '02' THEN t2.score END ) 数学 
FROM
    t_mysql_student s,
    ( SELECT * FROM t_mysql_score WHERE cid = '01' ) t1,
    ( SELECT * FROM t_mysql_score WHERE cid = '02' ) t2 
WHERE
    s.sid = t1.sid 
    AND t1.sid = t2.sid 
    AND t1.score > t2.score

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

**涉及表:**t_mysql_student , t_mysql_score

**连接方式:**内连接

**行转列:**流程控制函数

html 复制代码
SELECT
    s.*,
    ( CASE WHEN t1.cid = '01' THEN t1.score END ) 语文,
    ( CASE WHEN t2.cid = '02' THEN t2.score END ) 数学 
FROM
    t_mysql_student s,
    ( SELECT * FROM t_mysql_score WHERE cid = '01' ) t1,
    ( SELECT * FROM t_mysql_score WHERE cid = '02' ) t2 
WHERE
    s.sid = t1.sid 
    AND t1.sid = t2.sid

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

**涉及表:**t_mysql_student , t_mysql_score

**连接方式:**内连接,外连接

**行转列:**流程控制函数

html 复制代码
SELECT
    s.*,
    ( CASE WHEN t1.cid = '01' THEN t1.score END ) 语文,
    ( CASE WHEN t2.cid = '02' THEN t2.score END ) 数学 
FROM
    t_mysql_student s
    INNER JOIN ( SELECT * FROM t_mysql_score WHERE cid = '01' ) t1 ON s.sid = t1.sid
    LEFT JOIN ( SELECT * FROM t_mysql_score WHERE cid = '02' ) t2 ON t1.sid = t2.sid

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

**涉及表:**t_mysql_student , t_mysql_score

**查询方式:**子查询

**行转列:**流程控制函数

html 复制代码
SELECT
    s.*,
    ( CASE WHEN sc.cid = '01' THEN sc.score END ) 语文,
    ( CASE WHEN sc.cid = '02' THEN sc.score END ) 数学 
FROM
    t_mysql_student s,
    t_mysql_score sc 
WHERE
    s.sid = sc.sid 
    AND s.sid NOT IN ( SELECT sid FROM t_mysql_score WHERE cid = '01' ) 
    AND sc.cid = '02'

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

**涉及表:**t_mysql_student , t_mysql_score

**查询方式:**外连接

聚合函数: 四舍五入( round() ),平均值( avg()

有聚合函数意味着分组( GROUP BY )

html 复制代码
SELECT
    s.sid,
    s.sname,
    round( avg( sc.score ), 2 ) 平均数 
FROM
    t_mysql_student s
    LEFT JOIN t_mysql_score sc ON s.sid = sc.sid 
GROUP BY
    s.sid,
    s.sname 
HAVING
    平均数 >= 60

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

**涉及表:**t_mysql_student , t_mysql_score

**查询方式:**内连接

最后建议进行一次分组,不然数据过多

html 复制代码
SELECT
    s.sid,
    s.sname 
FROM
    t_mysql_student s
    LEFT JOIN t_mysql_score sc ON s.sid = sc.sid 
GROUP BY
    s.sid,
    s.sname

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

涉及表: t_mysql_student , t_mysql_score
查询方式: 外连接
聚合函数: 计数( count() ),求和( sum() )

有聚合函数意味着分组( GROUP BY )

html 复制代码
SELECT
    s.sid,
    s.sname,
    count( sc.score ) 选课总数,
    sum( sc.score ) 总成绩 
FROM
    t_mysql_student s
    LEFT JOIN t_mysql_score sc ON s.sid = sc.sid 
GROUP BY
    s.sid,
    s.sname

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

考核:聚合函数》总数。like的使用

html 复制代码
select count(*) from t_mysql_teacher where tname like '李%'

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

html 复制代码
SELECT
 
s.*,c.cname,t.tname
 
FROM
 
t_mysql_teacher t,t_mysql_student s,t_mysql_course c,t_mysql_score sc
 
WHERE
 
t.tid=c.tid and c.cid=sc.cid and sc.sid=s.sid and tname = '张三'

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

html 复制代码
SELECT
 
s.sid,s.sname,count(sc.score) n
 
FROM
 
t_mysql_score sc,t_mysql_student s
 
WHERE
 
sc.sid=s.sid
 
GROUP BY
 
s.sid,s.sname
 
HAVING
 
n<(select count(c.cid) from t_mysql_course c )

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

html 复制代码
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)查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

html 复制代码
SELECT
 
s.sid,s.sname,ROUND(AVG(sc.score)) 平均成绩,COUNT(sc.cid) n
 
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
 
n>=2

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

html 复制代码
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)按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

html 复制代码
SELECT
s.sid,s.sname,round(AVG(sc.score),2) avgNum ,
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 avgNum desc
 
 
SELECT
s.sid,s.sname,round(AVG(sc.score),2) avgNum ,
max(if(sc.cid='01',sc.score,0))语文,
max(if(sc.cid='02',sc.score,0))数学,
max(if(sc.cid='03',sc.score,0))英语
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 avgNum desc

15)查询各科成绩最高分、最低分和平均分:
以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

html 复制代码
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,

好啦今天就分享到这里了!!!希望能帮到你哦!!!

相关推荐
哈__28 分钟前
从 MySQL 到在线表格:NocoDB 自托管部署、数据导入与远程访问
数据库·mysql
倔强的石头1061 小时前
高可用与无感扩容——分布式时序数据库选型指南
数据库·分布式·时序数据库
91刘仁德9 小时前
MYSQL 事务原理及使用
android·mysql·adb
wxwx_bscxy3229 小时前
NodeJS 高校学业预警系统10551
mysql·node.js·vue·高校学业预警
袋鼠云数栈10 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛1392462567310 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛1392462567310 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
倔强的石头_12 小时前
事务边界与批量写入:避免长事务、锁等待和日志压力
数据库
努力努力再努力wz12 小时前
【Redis入门系列】从 KEYS 到 SCAN:渐进式遍历、Cursor 与位反转原理
数据库·redis·缓存
坐吃山猪13 小时前
【多线程】Lock与Condition
大数据·数据库