常用的SQL面试题(SQL经典试题)

SQL面试题解析 本资源涵盖了常见的 SQL 面试题,涵盖了学生、课程、成绩、教师等多个方面,涉及到多表查询、子查询、分组、排序等多种 SQL 技术。本文将对每个问题进行详细解析,并提供相应的 SQL 语句。 问题 1:查询“001”课程比“002”课程成绩高的所有学生的学号 在这个问题中,我们需要查询学生表、成绩表和课程表,找到“001”课程的成绩高于“002”课程的学生的学号。我们可以使用子查询来实现这个需求。 SELECT a.S# FROM ( SELECT s#, score FROM SC WHERE C#='001' ) a, ( SELECT s#, score FROM SC WHERE C#='002' ) b WHERE a.score > b.score AND a.s# = b.s#; 问题 2:查询平均成绩大于 60 分的同学的学号和平均成绩 在这个问题中,我们需要查询成绩表,找到平均成绩大于 60 分的学生的学号和平均成绩。我们可以使用 GROUP BY 语句和 HAVING 语句来实现这个需求。 SELECT S#, AVG(score) FROM SC GROUP BY S# HAVING AVG(score) > 60; 问题 3:查询所有同学的学号、姓名、选课数、总成绩 在这个问题中,我们需要查询学生表、成绩表和课程表,找到所有学生的学号、姓名、选课数和总成绩。我们可以使用 LEFT OUTER JOIN 语句和 GROUP BY 语句来实现这个需求。 SELECT Student.S#, Student.Sname, COUNT(SC.C#), SUM(score) FROM Student LEFT OUTER JOIN SC ON Student.S# = SC.S# GROUP BY Student.S#, Sname; 问题 4:查询姓“李”的老师的个数 在这个问题中,我们需要查询教师表,找到姓“李”的老师的个数。我们可以使用 LIKE 语句和 COUNT 语句来实现这个需求。 SELECT COUNT(DISTINCT(Tname)) FROM Teacher WHERE Tname LIKE '李%'; 问题 5:查询没学过“叶平”老师课的同学的学号、姓名 在这个问题中,我们需要查询学生表、成绩表、课程表和教师表,找到没学过“叶平”老师课的同学的学号和姓名。我们可以使用 NOT IN 语句和子查询来实现这个需求。 SELECT Student.S#, Student.Sname FROM Student WHERE S# NOT IN ( SELECT DISTINCT(SC.S#) FROM SC, Course, Teacher WHERE SC.C# = Course.C# AND Teacher.T# = Course.T# AND Teacher.Tname='叶平' ); 问题 6:查询学过“001”并且也学过编号“002”课程的同学的学号、姓名 在这个问题中,我们需要查询学生表、成绩表和课程表,找到学过“001”并且也学过编号“002”课程的同学的学号和姓名。我们可以使用 EXISTS 语句和子查询来实现这个需求。 SELECT Student.S#, Student.Sname FROM Student, SC WHERE Student.S# = SC.S# AND SC.C#='001' AND EXISTS ( SELECT * FROM SC AS SC_2 WHERE SC_2.S# = SC.S# AND SC_2.C#='002' ); 问题 7:查询学过“叶平”老师所教的所有课的同学的学号、姓名 在这个问题中,我们需要查询学生表、成绩表、课程表和教师表,找到学过“叶平”老师所教的所有课的同学的学号和姓名。我们可以使用 IN 语句和子查询来实现这个需求。 SELECT S#, Sname FROM Student WHERE S# IN ( SELECT S# FROM SC, Course, Teacher WHERE SC.C# = Course.C# AND Teacher.T# = Course.T# AND Teacher.Tname='叶平' GROUP BY S# HAVING COUNT(SC.C#) = ( SELECT COUNT(C#) FROM Course, Teacher WHERE Teacher.T# = Course.T# AND Tname='叶平' ) ); 问题 8:查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名 在这个问题中,我们需要查询学生表、成绩表和课程表,找到课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号和姓名。我们可以使用子查询和比较运算符来实现这个需求。 SELECT S#, Sname FROM ( SELECT Student.S#, Student.Sname, score, (SELECT score FROM SC SC_2 WHERE SC_2.S# = Student.S# AND SC_2.C#='002') score2 FROM Student, SC WHERE Student.S# = SC.S# AND C#='001' ) S_2 WHERE score2 < score; 问题 9:查询所有课程成绩小于 60 分的同学的学号、姓名 在这个问题中,我们需要查询学生表和成绩表,找到所有课程成绩小于 60 分的同学的学号和姓名。我们可以使用 NOT IN 语句和子查询来实现这个需求。 SELECT S#, Sname FROM Student WHERE S# NOT IN ( SELECT Student.S# FROM Student, SC WHERE Student.S# = SC.S# AND score > 60 ); 问题 10:查询没有学全所有课的同学的学号、姓名 在这个问题中,我们需要查询学生表和成绩表,找到没有学全所有课的同学的学号和姓名。我们可以使用 GROUP BY 语句和 HAVING 语句来实现这个需求。 SELECT Student.S#, Student.Sname FROM Student, SC WHERE Student.S# = SC.S# GROUP BY Student.S#, Student.Sname HAVING COUNT(C#) < (SELECT COUNT(C#) FROM Course); 问题 11:查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名 在这个问题中,我们需要查询学生表和成绩表,找到至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名。我们可以使用 IN 语句和子查询来实现这个需求。 SELECT S#, Sname FROM Student, SC WHERE Student.S# = SC.S# AND C# IN ( SELECT C# FROM SC WHERE S#='1001' ); 本资源涵盖了多种 SQL 技术,包括子查询、分组、排序、JOIN 语句等,旨在帮助读者掌握 SQL 语言的基本知识和应用技能。


剩余11页未读,继续阅读































- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 移动互联网SaaS软件市场背景下--纷享销客市场营销策略分析-终稿.docx
- 计算机导论模拟考试题6份完整版.doc
- 基于 C++ 编程语言实现的神经网络技术解析
- 信息化教学设计小清新文艺范LOMO风.ppt
- 以自动化与工业物联技术打造数字化工厂.pptx
- 单片机课程方案设计书步进电机启动停止正反转.doc
- PLC机械手控制系统方案设计书5.doc
- 计算机网络的拓扑结构-北京大学.doc
- 计算机软件及应用Quasiexperimentaldesigns本.ppt
- 信息化思路下中职机械识图教学与软件教学结合的探究.docx
- 基于深度学习的小学数学课堂教学-(2).doc
- 宿舍网络综合布线系统专业技术实施方案.doc
- 基于单片机的医院病房呼叫系统课程设计.doc
- 人工智能私法的概念网络及其挑战
- 微型计算机接口技术及应用期末考试试卷及答案.doc
- 医院综合布线方案.doc



评论1