数据分析sql⾯试必会6题经典_数据分析之路——SQL求职⾯
试题(6)
前⾯⼀段时间,对各类查询⽅式进⾏了⽐较有针对性的练习,⽽在实际的使⽤上,最有代表性的就是有关SQL的求职⾯试题⽬了,这⾥有⼀些(包括之前的)练习以供复习和汇总。
开始啦!
mysql面试题sql语句多表联查基础(简单)查询创建学校数据库的表
4张表查姓“猴”的学⽣名单查询姓名中最后⼀个字是“猴”的学⽣名单查询姓名中带“猴”字的学⽣名单查询姓“孟”的⽼师个数thinkphp企业
汇总分析查询课程编号为“0002”的总成绩查询选了课程的学⽣⼈数查询各科成绩最⾼和最低得分查询每门课程被选修的学⽣数查询男⽣、⼥⽣⼈数查询平均成绩⼤于60分学⽣的学号和平均成绩查询⾄少选修两门课程的学⽣学号查询同名同姓学⽣名单并统计同名⼈数查询不及格的课程并按课程号从⼤到⼩排列查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列检索课程
编号为“0004”且分数⼩于60的学⽣学号,结果按分数降序排列
为了能够看出结果,故在成绩表中添加了⼏条记录:统计每门课程的学⽣选修⼈数(超过2⼈的课程才统计):要求输出课程号和选修⼈数,查询结果按⼈数降序排序,若⼈数相同,按课程号升序排序查询两门以上不及格课程的同学的学号及其平均成绩
由于原表中并没有同⼀个⼈两条以上60分以下记录,故⽽修改部分成绩表数据以显⽰结果
复杂查询查询所有课程成绩⼩于60分学⽣的学号、姓名
此处将0002号成绩修改了以符合条件
翻译成⾃⼰理解的⼤⽩话学号姓名可以由学⽣表student获取
课程成绩可以由成绩表score获取,⼩于60分需要条件判断where
此处⽆需显⽰成绩,故⽽可以将成绩表查询数据作为条件,使⽤⼦查询
分析思路select 学号, 姓名
from student-> 由学⽣表中查询
where 学号 in-> 当学号与⼦查询结果其中⼀个相同时取出
(select 学号 from score-> 由成绩表中查询学号
group by 学号-> 以学号进⾏分组
having max(成绩) < 60)-> 分组结果中需要确认这名学⽣即使最⾼的成绩都⼩于60
group by -> ⽆
having -> ⽆
order by -> ⽆
limit -> ⽆
写出SQL语句
-- 查询所有课程成绩⼩于60分学⽣的学号、姓名SELECT 学号, 姓名 FROM student
WHERE 学号 IN (
SELECT 学号 FROM score
GROUP BY 学号
HAVING MAX(成绩) < 60
);
运⾏结果查询没有学全所有课的学⽣的学号、姓名
此处⾸先恢复了成绩表的初始数据,以便显⽰结果
翻译成⾃⼰理解的⼤⽩话学号、姓名可由学⽣表student中获取
课程学习情况可由成绩表score中获取,并通过学号分组,对分组结果指定条件:已修多少课程需要count(课程号)共计有多少课程则需要由课程表course中获取,使⽤count(课程号)
计算机语言python是什么意思最终⽆需显⽰课程号,故使⽤⼦查询即可
分析思路select 学号, 姓名
from student-> 由学⽣表中查询
where 学号 in-> 当学号与⼦查询结果其中⼀个相同时取出
(select 学号 from score-> 由成绩表中查询学号
group by 学号-> 以学号进⾏分组
having count(课程号)-> 分组结果中需要确认这名学⽣已修课程数量
< (select count(课程号) from course))-> 条件的后半部分是⼩于课程表总计课程数量
group by -> ⽆
having -> ⽆
order by -> ⽆
limit -> ⽆
写出SQL语句
-- 查询没有学全所有课的学⽣的学号、姓名SELECT 学号, 姓名 FROM student
WHERE 学号 IN (
SELECT 学号 FROM score
GROUP BY 学号
HAVING COUNT(课程号) < (SELECT COUNT(课程号) FROM course)
);
运⾏结果查询出只选修了两门课程的全部学⽣的学号和姓名
翻译成⾃⼰理解的⼤⽩话学号、姓名可由学⽣表student中获取
课程学习情况可由成绩表score中获取,并通过学号分组,对分组结果指定条件:已修多少课程需要count(课程号)最终⽆需显⽰课程号,故使⽤⼦查询即可
分析思路select 学号, 姓名
from student-> 由学⽣表中查询
where 学号 in-> 当学号与⼦查询结果其中⼀个相同时取出
(select 学号 from score-> 由成绩表中查询学号
2003 cant connect to mysql
group by 学号-> 以学号进⾏分组
having count(课程号) = 2)-> 分组结果中需要确认已修课程数量 = 2
group by -> ⽆
having -> ⽆
order by -> ⽆
正则表达式以a开头limit -> ⽆
写出SQL语句
-- 查询出只选修了两门课程的全部学⽣的学号和姓名SELECT 学号, 姓名 FROM student
WHERE 学号 IN (
SELECT 学号 FROM score
GROUP BY 学号
HAVING COUNT(课程号) = 2
);
运⾏结果1990年出⽣的学⽣名单
翻译成⾃⼰理解的⼤⽩话学⽣名单可由学⽣表student中获取
python接单一般多少钱出⽣⽇期的年份需要使⽤year()函数取出,并使⽤where指定条件
分析思路select 学号, 姓名, 出⽣⽇期
from student-> 由学⽣表中查询
where year(出⽣⽇期) = 1990-> 当出⽣年份为1990时取出
group by -> ⽆
having -> ⽆
order by -> ⽆
limit -> ⽆
写出SQL语句
-- 1990年出⽣的学⽣名单SELECT 学号, 姓名, 出⽣⽇期 FROM student
WHERE YEAR(出⽣⽇期) = 1990;
运⾏结果按课程号分组取成绩最⼤值所在⾏的数据
翻译成⾃⼰理解的⼤⽩话需要取出课程成绩所在⾏的数据,故由成绩表score获取所有列
⾸先需要按课程号分组
之后需要指定分组最⾼成绩的结果
最后按照该结果获取所在⾏数据
此处考虑分组最⾼成绩获取后还要通过where⽅式⽐较取值,故⽽需要⼦查询
分析思路select * from score as s1-> 由成绩表中查询所有列,由于有⼦查询,故需要使⽤别名以⽰区别where 成绩-> 指定成绩为判断条件
= (
select max(成绩) from score as s2-> 由成绩表中查询最⾼成绩,由于是⼦查询,故需要使⽤别名where s2.课程号 = s1.课程号-> 两个查询结果的课程号需要⼀致
group by 课程号-> 按照课程号分组
)
group by -> ⽆
having -> ⽆
order by -> ⽆
limit -> ⽆
写出SQL语句
-- 按课程号分组取成绩最⼤值所在⾏的数据SELECT * FROM score AS s1
WHERE 成绩 = (
SELECT MAX(成绩) FROM score AS s2
WHERE s1.课程号 = s2.课程号
GROUP BY 课程号
);
运⾏结果按课程号分组取成绩最⼩值所在⾏的数据
翻译成⾃⼰理解的⼤⽩话需要取出课程成绩所在⾏的数据,故由成绩表score获取所有列
⾸先需要按课程号分组
之后需要指定分组最低成绩的结果
最后按照该结果获取所在⾏数据
此处考虑分组最低成绩获取后还要通过where⽅式⽐较取值,故⽽需要⼦查询
分析思路select * from score as s1-> 由成绩表中查询所有列,由于有⼦查询,故需要使⽤别名以⽰区别where 成绩-> 指定成绩为判断条件
= (
select min(成绩) from score as s2-> 由成绩表中查询最低成绩,由于是⼦查询,故需要使⽤别名where s2.课程号 = s1.课程号-> 两个查询结果的课程号需要⼀致
group by 课程号-> 按照课程号分组
)
group by -> ⽆
having -> ⽆
order by -> ⽆
limit -> ⽆
写出SQL语句
-- 按课程号分组取成绩最⼩值所在⾏的数据SELECT * FROM score AS s1
WHERE 成绩 = (
SELECT MIN(成绩) FROM score AS s2
WHERE s1.课程号 = s2.课程号
GROUP BY 课程号
);
运⾏结果查询各科成绩前两名的记录
翻译成⾃⼰理解的⼤⽩话查询成绩记录可以由成绩表score获取,由于是记录,故取出所有列*
⾸先考虑到是各科成绩,需要按照课程号分组
成绩前两名可以通过按照降序排序,并限制为2条获取
此处考虑分组前两名获取后还要通过where⽅式⽐较取值,故⽽需要⼦查询
分析思路select * from score as s1-> 由成绩表中查询所有列,由于有⼦查询,故需要使⽤别名以⽰区别where 课程号-> 指定课程号为判断条件
in (
select 课程号 from score as s2-> 由成绩表中查询符合条件的课程号,由于是⼦查询,故需要使⽤别名where s2.课程号 = s1.课程号-> 两个查询结果的课程号需要⼀致
order by 成绩 desc-> 按照降序排列
limit 2-> 只取前两条记录
)
group by -> ⽆
having -> ⽆
order by -> ⽆
limit -> ⽆
写出SQL语句
-- 查询各科成绩前两名的记录SELECT * FROM score AS s1
WHERE 课程号 IN (
SELECT 课程号 FROM score AS s2
WHERE s2.课程号 = s1.课程号
ORDER BY 成绩 DESC
LIMIT 2
);
运⾏结果
错误:
识别问题
该版本的MySQL不⽀持在IN/ALL/ANY/SOME⼦查询内使⽤LIMIT……
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论