Mysql经典面试题20道

这篇具有很好参考价值的文章主要介绍了Mysql经典面试题20道。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我整理的必刷SQL经典题目

SQL语句在工作与面试时都必不可少,下面我整理了20道题目供大家练习,常见的使用方法和开窗函数都有考察,来测测你的sql技能是否过关。

一、创建表

共有4个表,分别是学生信息表、课程表、老师信息表和成绩表。

1 学生信息表

--建表语句
CREATE TABLE Student (
  SID VARCHAR (10),
  Sname VARCHAR (10),
  Sage datetime,
  Ssex VARCHAR (10)
)

--插入测试数据
INSERT INTO Student VALUES('01' , '赵雷' , '1990-01-01' , '男')
INSERT INTO Student VALUES('02' , '钱电' , '1990-12-21' , '男')
INSERT INTO Student VALUES('03' , '孙风' , '1990-05-20' , '男')
INSERT INTO Student VALUES('04' , '李云' , '1990-08-06' , '男')
INSERT INTO Student VALUES('05' , '周梅' , '1991-12-01' , '女')
INSERT INTO Student VALUES('06' , '吴兰' , '1992-03-01' , '女')
INSERT INTO Student VALUES('07' , '郑竹' , '1989-07-01' , '女')
INSERT INTO Student VALUES('08' , '王菊' , '1990-01-20' , '女')

2 课程表

--建表语句
CREATE TABLE Course (
  CID VARCHAR (10),
  Cname VARCHAR (10),
  TID VARCHAR (10)
)

--插入测试数据
INSERT INTO Course VALUES('01' , '语文' , '02')
INSERT INTO Course VALUES('02' , '数学' , '01')
INSERT INTO Course VALUES('03' , '英语' , '03')

3 老师信息表

--建表语句
CREATE TABLE Teacher (
  TID VARCHAR (10),
  Tname varchar (10)
)

--插入测试数据
INSERT INTO Teacher VALUES('01' , '张三')
INSERT INTO Teacher VALUES('02' , '李四')
INSERT INTO Teacher VALUES('03' , '王五')

4 成绩表

--建表语句
CREATE TABLE SC (
  SID VARCHAR (10),
  CID VARCHAR (10),
  score int	(5)
)

--插入测试数据
INSERT INTO SC VALUES('01' , '01' , 80)
INSERT INTO SC VALUES('01' , '02' , 90)
INSERT INTO SC VALUES('01' , '03' , 99)
INSERT INTO SC VALUES('02' , '01' , 70)
INSERT INTO SC VALUES('02' , '02' , 60)
INSERT INTO SC VALUES('02' , '03' , 80)
INSERT INTO SC VALUES('03' , '01' , 80)
INSERT INTO SC VALUES('03' , '02' , 80)
INSERT INTO SC VALUES('03' , '03' , 80)
INSERT INTO SC VALUES('04' , '01' , 50)
INSERT INTO SC VALUES('04' , '02' , 30)
INSERT INTO SC VALUES('04' , '03' , 20)
INSERT INTO SC VALUES('05' , '01' , 76)
INSERT INTO SC VALUES('05' , '02' , 87)
INSERT INTO SC VALUES('06' , '01' , 31)
INSERT INTO SC VALUES('06' , '03' , 34)
INSERT INTO SC VALUES('07' , '02' , 89)
INSERT INTO SC VALUES('07' , '03' , 98)

二、练习题

Q1:查询「李」姓老师的数量

SELECT
	count( * ) 李老师数据 
FROM
	teacher 
WHERE
	Tname LIKE '李%'

Q2:查询存在成绩的学生信息

--方法1:
SELECT DISTINCT
	s.* 
FROM
	sc g
	JOIN student s ON g.sid = s.sid 
WHERE
	g.score IS NOT NULL

--方法2:
SELECT
	* 
FROM
	student 
WHERE
	sid IN ( SELECT sid FROM sc WHERE sc.score IS NOT NULL )

Q3:查询不存在"01"课程但存在"02"课程的情况

SELECT
	* 
FROM
	sc 
WHERE
	cid = '02' 
	AND SID NOT IN ( SELECT SID FROM SC WHERE CID = '01' )

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

SELECT
	A.*,
	B.score 
FROM
	Student A
	JOIN ( SELECT * FROM SC WHERE CID = '01' ) B ON A.SID = B.SID
	JOIN ( SELECT * FROM SC WHERE CID = '02' ) C ON C.SID = B.SID 
WHERE
	B.score > C.score

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

SELECT
	* 
FROM
	student s
	JOIN ( SELECT * FROM sc WHERE cid = '01' ) g1 ON s.SID = g1.sid
	LEFT JOIN ( SELECT * FROM sc WHERE cid = '02' ) g2 ON s.SID = g2.sid

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

SELECT
	s.*,
	T.Tname 
FROM
	student s
	JOIN SC G ON S.SID = G.SID
	JOIN course C ON G.CID = C.CID
	JOIN teacher T ON C.TID = T.TID 
WHERE
	TNAME = '张三'

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

SELECT
	s.Sname 
FROM
	student s 
WHERE
	sid NOT IN (
	SELECT
		g.sid 
	FROM
		sc g
		JOIN course c ON g.cid = c.cid
		JOIN teacher t ON t.tid = c.tid 
	WHERE
		t.tname = '张三' 
	)

Q8:查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数

SELECT
	c.Sname,
	c.score,
	d.Cname 
FROM
	(
	SELECT
		a.sid,
		a.Sname,
		b.score,
		b.cid 
	FROM
		student a
		JOIN ( SELECT sid, cid, score FROM sc WHERE score > 70 ) b ON a.sid = b.sid 
	) c
	JOIN course d ON d.cid = c.cid

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

SELECT
	cid,
	max( SCORE ),
	min( score ),
	AVG( SCORE ) 
FROM
	sc 
GROUP BY
	CID

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

SELECT
	s.SID,
	s.Sname,
	sum( g.score ),
	COUNT( g.cid ) 
FROM
	student s
	LEFT JOIN sc g ON s.sid = g.sid 
GROUP BY
	s.SID

Q11:查询没有学全所有课程的同学的信息

SELECT
	s.*,
	count( g.cid ) 
FROM
	student s
	JOIN sc g ON s.sid = g.SID 
GROUP BY
	s.sid 
HAVING
	count( g.cid ) < ( SELECT count( * ) FROM course)

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

SELECT
	s.*,
	g.score 
FROM
	student s
	RIGHT JOIN ( SELECT sid, score FROM sc WHERE score < 60 AND cid = '01' ) g ON s.sid = g.SID 
ORDER BY
	g.score DESC

Q13:查询出只选修两门课程的学生学号和姓名

SELECT
	sid,
	sname 
FROM
	student 
WHERE
	sid IN ( SELECT sid FROM sc GROUP BY sid HAVING count( CID ) = 2 )

Q14:查询平均成绩大于等于85分的所有学生的学号、姓名和平均成绩

SELECT
	a.*,
	b.平均成绩 
FROM
	student a
	JOIN ( SELECT sid, avg( score ) 平均成绩 FROM sc GROUP BY sid HAVING avg( score ) >= 85 ) b ON a.sid = b.sid

Q15:查询课程名称为「数学」,且分数低于60的学生姓名和分数

SELECT
	* 
FROM
	student a
	JOIN (
	SELECT
		g.sid,
		c.Cname,
		g.score 
	FROM
		sc g
		JOIN course c ON g.cid = c.cid 
	WHERE
		c.Cname = '数学' 
		AND g.score < 60 
	) b ON a.SID = b.SId

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

SELECT
	SID,
	avg( score ),
	MAX( CASE WHEN CID = '01' THEN score ELSE 0 END ) '01',
	MAX( CASE WHEN CID = '02' THEN score ELSE 0 END ) '02',
	MAX( CASE WHEN CID = '03' THEN score ELSE 0 END ) '03' 
FROM
	sc 
GROUP BY
	SID 
ORDER BY
	avg( score ) DESC

Q17:展示每位同学的各科成绩,并将各科成绩排名

SELECT
	*,
	RANK ( ) over ( PARTITION BY sid ORDER BY score DESC ) 排名 
FROM
	SC

Q18:查询学生的总成绩,并进行排名

SELECT
	sid,
	a.总成绩,
	rank ( ) over ( ORDER BY a.总成绩 DESC ) 总成绩排名 
FROM
	( SELECT SID, sum( score ) 总成绩 FROM sc GROUP BY sid ) a

Q19:查询各科成绩前三名的记录

SELECT
	* 
FROM
	( SELECT CID, score, RANK ( ) OVER ( PARTITION BY CID ORDER BY SCORE DESC ) 排名 FROM SC ) a 
WHERE
	a.排名 <4

Q20:查询每门功课成绩最好的前两名

SELECT
	a.* 
FROM
	( SELECT cid, score, rank ( ) over ( PARTITION BY cid ORDER BY score DESC ) 排名 FROM sc ) a 
WHERE
	a.排名 <= 2

我整理的必刷SQL经典题目文章来源地址https://www.toymoban.com/news/detail-434782.html

到了这里,关于Mysql经典面试题20道的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言中链表经典面试题目

    🐶博主主页: @ᰔᩚ. 一怀明月ꦿ  ❤️‍🔥 专栏系列: 线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++ 🔥 座右铭: “不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀   目录 环

    2024年02月02日
    浏览(79)
  • 小白水平理解面试经典题目LeetCode 594 最大和谐字符串

    这道题属于字符串类型题目,解决的办法还是有很多的,暴力算法,二分法,双指针等等。 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个

    2024年01月23日
    浏览(47)
  • 【pygame游戏开发】这几个经典游戏,小红书Python面试题目

    pygame.time.set_timer(change_hole_event, 800) mole = Mole(cfg.MOLE_IMAGEPATHS, hole_pos) hammer = Hammer(cfg.HAMMER_IMAGEPATHS, (500, 250)) clock = pygame.time.Clock() your_score = 0 flag = False init_time = pygame.time.get_ticks() while True: time_remain = round((61000 - (pygame.time.get_ticks() - init_time)) / 1000.) if time_remain == 40 and not flag: hole

    2024年04月25日
    浏览(50)
  • 面试经典150题【11-20】

    用一个哈希表和一个变长数组组成一个新的数据类型。 获取随机元素的话,直接random一个数然后从数组里取就行。 插入和删除的话,先判断有没有这个数,哈希表里存的是{ 数据:在变长数组中的索引} 插入的话直接插变长数组末尾,然后再在哈希表里插 删除的话,把最后一

    2024年02月21日
    浏览(39)
  • 【Elacticsearch】 原理/数据结构/面试经典问题整理

    对Elacticsearch 原理/数据结构/面试经典问题整理的文章; 映射 | Elasticsearch: 权威指南 | Elastic 目录 Elacticsearch介绍 原理 建立索引原理 查询索引原理 更新索引原理 删除索引原理 分片副本机制,集群发现选举机制 ,负载机制,容错机制,扩容机制 数据类型 数据结构 先介绍倒排

    2024年02月10日
    浏览(44)
  • 2023前端超全面试题,全是金三银四面试真题整理!附答案。

    目录 HTML 标签语意化 HTML5新特性 SEO input元素的类型 iframe的特点 CSS Flex BFC 重排重绘 CSS优先级 CSS3新特性 清除浮动的方法 盒模型的理解 响应式布局 移动适配方案 三栏布局 圣杯布局和双飞翼布局 JS JS为何是单线程 JS数据类型 js判断数据类型 js中的length属性 判断空对象 判断空

    2024年02月08日
    浏览(47)
  • 小白水平理解面试经典题目LeetCode 404 Sum of Left Leaves【Tree】

    给定二叉树的root,返回所有左叶的总和。 叶子是没有子节点的节点。左叶是另一个节点的左子节点的叶。 在大学某个自习的下午,小白坐在教室看到这道题。想想自己曾经和白月光做题,现在大过年的,也是只有自己练题了。左边一颗树,右边一棵树。。。 这时候黑长直女

    2024年02月22日
    浏览(47)
  • 网络安全面试题大全(整理版)300+面试题附答案详解,最全面详细

    随着国家政策的扶持,网络安全行业也越来越为大众所熟知,想要进入到网络安全行业的人也越来越多。 为了拿到心仪的Offer之外,除了学好网络安全知识以外,还要应对好企业的面试。 作为一个安全老鸟,工作这么多年,面试过很多人也出过很多面试题目,也在网上收集了

    2024年02月08日
    浏览(58)
  • 大厂经典运维监控(Zabbix+Prometheus)面试题整理汇总

    1、监控原则 监控是基础设施,目的是为了解决问题,不要只朝着大而全去做,尤其是不必要的指标采集,浪费人力和存储资源(To B商业产品例外)。 需要处理的告警才发出来,发出来的告警必须得到处理。 简单的架构就是最好的架构,业务系统都挂了,监控也不能挂。G

    2024年02月06日
    浏览(41)
  • Java开发面试题目场景业务提问第十六章:常问日常必备_JAVA_面试题集(含答案)【王大师】

    往期文章   第 十 章 日常_JAVA_面试题集10(含答案)  第十三章:日常_JAVA_面试题集13(含答案)  第十二章:日常_JAVA_面试题集12(含答案)  第十一章:日常_JAVA_面试题集11(含答案)  往期文章大全……

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包