MySQL数据库之2018年最新关于sql查询的面试笔试题
小标 2019-03-06 来源 : 阅读 2224 评论 0

摘要:本文主要向大家介绍了MySQL数据库之2018年最新关于sql查询的面试笔试题 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

本文主要向大家介绍了MySQL数据库之2018年最新关于sql查询的面试笔试题 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

MySQL数据库之2018年最新关于sql查询的面试笔试题

一、试用SQL查询语句表达下列对教学数据库中三个基本表 S、SC 、C 的查询:


S(sno,sname,SAGE,SSEX) 各字段表示学号,姓名,年龄,性别


Sc(sno,cno,grade) 各字段表示学号,课程号,成绩C(cno,cname, TEACHER) 各字段表示课程号,课程名和教师名 其 中 SAGE, grade 是数值型,其他均为字符型。


要求用 SQL 查询语句实现如下处理:


1 .统计有学生选修的课程门数。


2 .求选修 C4 课程的学生的平均年龄。


3 . 求 LIU 老师所授课程的每门课程的学生平均成绩。


4 .统计每门课程的学生选修人数 (超过 2 人的课程才统计) 。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。


5 . 检索学号比 WANG 同学大,而年龄比他小的学生姓名。


6 .检索姓名以 WANG 打头的所有学生的姓名和年龄。


7 .在 SC 中检索成绩为空值的学生学号和课程号。


8 . 求年龄大于女同学平均年龄的男学生姓名和年龄。


9 .求年龄大于所有女同学年龄的男学生姓名和年龄。


其中涉及单表题: 1.4.6.7


参考答案:


1.统计有学生选修的课程门数。


SELECT COUNT(DISTINCT Cno) FROM SC


2 .求选修 C4 课程的学生的平均年龄。


SELECT AVG(SAGE )


FROMS WHERE Sno


IN(SELECT Sno FROM SC WHERE Cno='4')


或者,


SELECT AVG(SAGE)


FROM S,SC WHERES.Sno=SC.Sno AND Cno='4'


3 .求LIU 老师所授课程的每门课程的学生平均成绩。


SELECT AVG(GRADE)


FROM SC join C on SC.Cno=C.Cno WHERE TEACHER='liu'


GROUP BY c.Cno


另:


SELECTCNAME,AVG(GRADE) FROM SC ,C WHERE SC.Cno=C.Cno AND TEACHER='liu'


GROUP BY c.Cno,cname


4 .统计每门课程的学生选修人数 (超过 2 人的课程才统计) 。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。


SELECTDISTINCT Cno,COUNT(Sno) FROM SC


GROUPBY Cno HAVING COUNT(Sno)>2


ORDER BY 2 DESC, Cno ASC


或:


SELECT DISTINCT Cno,COUNT(Sno) as 人数


FROMSC GROUP BY Cno


HAVING COUNT(Sno)>2


ORDER BY 人 数 DESC, Cno ASC


5 .检索学号比 WANG 同学大,而年龄比他小的学生姓名。


SELECTX.SNAME FROM S AS X, S AS Y


WHERE Y .SNAME='WANG' AND X.Sno>Y.Sno AND X.SAGE<y.sage< p="">


或:


SELECT SNAME


from s


where sno>(select sno from s where SNAME='WANG') andSAGE<(select sAGE from s where SNAME='WANG')


6 .检索姓名以 WANG 打头的所有学生的姓名和年龄。


SELECT SNAME,SAGE FROM S


WHERE SNAME LIKE 'WANG%'


7.在 SC 中检索成绩为空值的学生学号和课程号。


SELECT Sno,CnoFROM SC WHERE GRADE IS NULL


8 .求年龄大于女同学平均年龄的男学生姓名和年龄。 SELECT SNAME,SAGE


FROM S


WHERE SSEX=' 男'


AND SAGE>(SELECTAVG(SAGE) FROM S WHERE SSEX='女')


9 .求年龄大于所有女同学年龄的男学生姓名和年龄。



SELECTSNAME,SAGE FROM S AS X


WHERE X.SSEX=' 男'AND X.SAGE >ALL (SELECT SAGE FROMS AS Y WHERE


Y.SSEX=' 女')


二、试用 SQL 更新语句表达对教学数据库中三个基本表 S、


SC 、C的各个更新操作:


要求用 SQL 更新语句实现如下处理:


1.往基本表 S 中插入一个学生元组( ‘ S9’,‘ WU ’,18 )。


2 .在基本表 S 中检索每一门课程成绩都大于等于 80 分的学生学号、姓名和性别, 并把检索到的值送往另一个已存在的基本表 S1 ( Sno , SNAME , SSEX )。


3 .在基本表 SC 中删除尚无成绩的选课元组。


4 .把WANG 同学的学习选课和成绩全部删去。


5 .把选修数据库原理课不及格的成绩全改为空值。


6 .把低于总平均成绩的女同学成绩提高 5% 。


7 .在基本表 SC 中修改 4 号课程的成绩,若成绩小于等于 75 分时提高 5% , 若成绩大于 75 分时提高 4% (用两个 UPDATE 语句实现)。


参考答案:


1.往基本表 S 中插入一个学生元组( ‘ S9’,‘ WU ’,18 )。


INSERT INTO S(Sno,SNAME,SAGE) VALUES('59','WU',18)


2 .在基本表 S 中检索每一门课程成绩都大于等于 80 分的学生学号、姓名和性别, 并把检索到的值送往另一个已存在的基本表 S1 ( Sno , SANME , SSEX )。


select Sno,SNAME,SSEX intos1 from student delete from s1


INSERT INTO S1(Sno,SNAME,SSEX) SELECT Sno,SNAME,SSEX


FROMS WHERE NOT EXISTS(SELECT * FROM SC WHERE GRADE<80 AND S.Sno=SC.Sno)


select * from s1


考虑:以上会有什么问题?


INSERTINTO S1(Sno,SNAME,SSEX) SELECT Sno,SNAME,SSEX


FROM S WHERE NOT EXISTS(SELECT * FROM SC WHERE


GRADE<80 AND S.Sno=SC.Sno or S.Sno=SC.Sno and gradeis null) and sno in (select sno from sc)



3 .在基本表 SC 中删除尚无成绩的选课元组。


DELETE FROM SCWHERE GRADE IS NULL


4 .把WANG 同学的学习选课和成绩全部删去。


DELETEFROM SC WHERE Sno IN(SELECT Sno FROM S


WHERE SNAME='WANG')


5 .把选修数据库原理课不及格的成绩全改为空值。 UPDATE SC SET GRADE=NULL


WHERE GRADE<60 AND Cno IN(SELECT Cno FROM C


WHERE CNAME=' 数据库原理 ')


6 .把低于总平均成绩的女同学成绩提高 5% 。


UPDATE SC


SETGRADE=GRADE*1.05


WHERE GRADE<(SELECT AVG(GRADE) FROM SC)


AND Sno IN (SELECT Sno FROM SWHERE SSEX=' 女')


7 .在基本表 SC 中修改 4 号课程的成绩,若成绩小于等于 75 分时提高 5% , 若成绩大于 75 分时提高 4% (用两个 UPDATE 语句实现)。


UPDATE SC


SETGRADE=GRADE*1.05 WHERE Cno='4' AND GRADE<=75 UPDATE SC


SET GRADE=GRADE*1.04 WHERE Cno='4' AND GRADE>75


三、问题描述:为管理岗位业务培训信息,建立 3 个表 :


S (Sno,SN,SD,SA) Sno,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄


C (Cno,CN ) Cno,CN 分别代表课程编号、课程名称


SC ( Sno,Cno,G ) Sno,Cno,G 分别代表学号、所选修的课程编号、学习成绩


要求实现如下 5 个处理:


1.使用标准 SQL 嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名


2.使用标准 SQL 嵌套语句查询选修课程编号为’ C2 ’的学员姓名和所属单位


3.使用标准 SQL 嵌套语句查询不选修课程编号为’ C5 ’的学员姓名和所属单位



4.使用标准 SQL 嵌套语句查询只选修了一门课程的学员姓名和所属单位


5.查询选修了课程的学员人数


6.查询选修课程超过 5 门的学员学号和所属单位


参考答案:


1 .使用标准 SQL 嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名


SELECT SN,SD FROM S WHERE [Sno] IN(


SELECT [Sno] FROM C,SC


WHERE C.[Cno]=SC.[Cno] AND CN=N' 税收基础')


2 .使用标准 SQL 嵌套语句查询选修课程编号为’ C2 ’的学员姓名和所属单位


SELECTS.SN,S.SD FROM S,SC WHERE S.[Sno]=SC.[Sno]


ANDSC.[Cno]='C2'


3 .使用标准 SQL 嵌套语句查询不选修课程编号为’ C5 ’的学员姓名和所属单位


SELECT SN,SD FROM S WHERE [Sno] NOT IN(


SELECT [Sno] FROM SC


WHERE[Cno]='C5')


4 .使用标准 SQL 嵌套语句查询只选修了一门课程的学员姓名和所属单位


SELECT SN,SD FROM S WHERE [Sno] IN(


SELECT [Sno] FROM SC inner JOIN C ON SC.[Cno]=C.[Cno] GROUP BY [Sno]


HAVINGCOUNT(*)=1)


5.查询选修了课程的学员人数


SELECT 学员人数 =COUNT(DISTINCT[Sno]) FROM SC



6 .查询选修课程超过 5 门的学员学号和所属单位


SELECT SN,SD FROM S WHERE [Sno] IN(


SELECT [Sno] FROM SC GROUP BY [Sno]


HAVING COUNT(DISTINCT [Cno])>5)


四、问题描述:已知关系模式:


S(SNO,SNAME ) 学生关系。 SNO 为学号, SNAME 为姓名


C (CNO,CNAME,TEACHER) 课程关系。 CNO 为课程号, CNAME 为课程名,


TEACHER 为任课教师


SC(SNO,CNO,GRADE) 选课关系。 GRADE 为成绩


要求实现如下 5 个处理:


1 . 找出没有选修过“李明”老师讲授课程的所有学生姓名


2 .列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩


3 . 列出既学过“ 1 ”号课程,又学过“ 2 ”号课程的所有学生姓名


4 .列出“ 1 ”号课成绩比“ 04010002 ”号同学该门课成绩高的所有学生的学号


5 . 列出“ 1 ”号课成绩比“ 2 ”号课成绩高的所有学生的学号及其“ 1 ”号课和“ 2 ”号课的成绩


参考答案:


1 .找出没有选修过“李明”老师讲授课程的所有学生姓名


select sname from swhere not exists (select * from c,sc where c.cno=sc.cno AND c.teacher=N' 李明 ' AND s.sno=sc.sno)


参考: select sno,sname from s where sno not in


(select sno from sc,c where c.cno=sc.cno ANDc.teacher=N'liu')


2 .列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩


SELECT S.SNO,SNAME,AVG_GRADE=AVG(SC.GRADE) FROM S,SC


WHERE GRADE<60 and s.sno=sc.sno GROUP BY s.SNO,s.sname


HAVINGCOUNT(DISTINCT CNO)>=2




SELECT S.SNO,S.SNAME,AVG_GRADE=AVG(SC.GRADE) FROM S,SC,(


SELECT SNO FROM SC


WHERE GRADE<60


GROUP BY SNO


HAVINGCOUNT(DISTINCT CNO)>=2


)A WHERE S.SNO=A.SNO AND SC.SNO=A.SNO GROUP BY S.SNO,S.SNAME


3.列出既学过“ 1 ”号课程,又学过“ 2 ”号课程的所有学生姓名SELECT S.SNO,S.SNAME


FROM S,sc


where S.SNO=SC.SNO and cno='1' and s.sno in (select S.snofrom S,sc


where S.SNO=SC.SNO and cno='2')



SELECT S.SNO,S.SNAME FROM S,(


SELECT SC.SNO FROM SC,C


WHERE SC.CNO=C.CNO


AND C.cno IN('1','2') GROUP BY SNO


HAVINGCOUNT(DISTINCT c.CNO)=2


)SC WHERES.SNO=SC.SNO


4 。列出“ 1 ”号课成绩比“ 04010002 ”号同学该门课成绩高的所有学生的学号


SELECT S.SNO,S.SNAME FROM S,SC


WHERESC.CNO='1'and SC.sNO=S.sNO


ANDgrade>(select grade from s,sc


wheres.SNO='04010002'and SC.CNO='1'and SC.sNO=S.sNO)


5 。列出“ 1 ”号课成绩比“ 2 ”号课成绩高的所有学生的学号及其“ 1 ”号课和“ 2 ”号课的成绩


SELECT SC1.SNO,[1 号课成绩 ]=SC1.GRADE,[2 号课成绩 ]=SC2.GRADE FROMSC SC1,SC SC2


WHERE SC1.CNO='1' AND SC2.CNO='2'



ANDSC1.SNO=SC2.SNO


ANDSC1.GRADE>SC2.GRADE


四、通配符理解题(请说出下列通配符的含义)


1.LIKE 'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。2.LIKE '%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer 、Stringer )。


3.LIKE '%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet 、


Green、McBadden)。


4.LIKE '_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如


Cheryl、Sheryl )。


5.LIKE '[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer )。


6.LIKE 'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称


(如 MacFeather )。


7.LIKE '5[%]' -- 5%


8.LIKE '5%' -- 5 后跟 0 个或更多字符的字符串


9.LIKE '[_]n' -- _n


10.LIKE '_n' --an,in,on (and so on) 11.LIKE '[a-cdf]' -- a, b, c, d, or f


12.LIKE '[-acdf]' -- -, a, c, d, or f 13.LIKE '[ [ ]' --[


14.LIKE ']' -- ]


          

本文由职坐标整理并发布,希望对同学们学习MySQL有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程