SQL查询实践:解析如何找出某课程高分学生

4星 · 超过85%的资源 需积分: 16 7 下载量 58 浏览量 更新于2024-09-16 收藏 145KB DOC 举报
"SQL查询语句练习,包含创建表格及数据插入,以及一个查询问题的解答,用于学习和练习SQL的使用。" 在SQL查询语句的实践中,我们需要理解数据库的基本结构和操作。在这个例子中,我们有四个表格:Student(学生表),Course(课程表),SC(成绩表),和Teacher(教师表)。这些表格都有各自的字段,如Student表有S#(学生编号)、Sname(学生姓名)、Sage(年龄)和Ssex(性别)等。 首先,让我们来看一下如何创建这些表格: 1. `CREATE TABLE Student(S# VARCHAR2(20), Sname VARCHAR2(10), Sage INT, Ssex VARCHAR2(2))` 这条语句创建了Student表,字段包括学生编号(S#)、学生姓名(Sname)、年龄(Sage)和性别(Ssex)。 2. `CREATE TABLE Course(C# VARCHAR2(20), Cname VARCHAR2(10), T# VARCHAR2(20))` 创建了Course表,包含课程编号(C#)、课程名称(Cname)和教师编号(T#)。 3. `CREATE TABLE SC(S# VARCHAR2(20), C# VARCHAR2(20), score VARCHAR2(4))` 创建了SC表,记录学生选课成绩,字段包括学生编号(S#)、课程编号(C#)和分数(score)。 4. `CREATE TABLE Teacher(T# VARCHAR2(20), Tname VARCHAR2(10))` 创建了Teacher表,存储教师信息,包括教师编号(T#)和教师姓名(Tname)。 接着,我们向这些表格中插入了一些示例数据,比如学生信息、课程信息等。 然后,问题来了:查询“001”课程比“002”课程成绩高的所有学生的学号。这个问题可以通过子查询和内连接来解决: ```sql 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# ``` 解析这个问题的步骤如下: 1. 首先,我们创建两个子查询,分别为a和b。a子查询找出所有选修“001”课程的学生及其分数,b子查询找出所有选修“002”课程的学生及其分数。 2. 然后,通过内连接(INNER JOIN)将这两个子查询组合在一起,连接条件是学生学号(s#)相同。 3. 最后,我们添加一个WHERE子句来筛选出“001”课程分数高于“002”课程分数的学生。 通过这种方式,我们可以找到那些在“001”课程上得分高于“002”课程的所有学生的学号。这个练习有助于加深对SQL查询的理解,特别是子查询和连接操作的应用。在实际的数据库管理或数据分析工作中,这样的技能是非常关键的。