案例分析题

数据库查询是数据库的核心操作, SQL 提供了 SELECT 语句进行数据库的查询, 其一般格式如下:

SELECT [ALL|DISTINCT]<目标列表达式 >[, < 目标列表达式>]...

FROM <表名或视图名 >[, < 表名或视图名>]...

[WHERE<条件表达式>]

[GROUP BY <列名 1> [HAVING <条件表达式>]]

[ORDER BY <列名 2> [ASC|DESC]]

其含义是: 根据 WHERE 子句的条件表达式, 从 FROM 子句中指定的基本表或视图中找出满足条件的元组, 再按SELECT 子句中的目标列表达式, 选出元组中的属性值形成结果表。 如果有 GROUP 子句, 则将结果按<列名 1>的值进行分组, 该属性列值相等的元组为一组。 如果有 ORDER 子句, 结果表要按<列名 2>的值升序或降序排列。某学校学生、 教师及课程关系如下:

学生由学号唯一标识, 学生相关信息包括姓名、 性别、 专业号和年龄等;

教师由工作证号唯一标识, 教师相关信息包括姓名, 年龄和所授课程号等;

课程由课程号唯一标识, 课程相关信息包括课程名, 学分, 授课教师工作证号及授课时间等;

选课信息包括选课学生学号, 课程号及考试成绩等。

根据关系模型完成数据库设计, 包括数据库表、 键值; 

用 SQL 语句表达如下查询: 

“张大民(教师名)” 讲授的课程名和在这些课程中考试超过 90 分的学生的学号及姓名, 按分数的降序排列。

【正确答案】

数据库设计表设计如下: 

学生表student
StuID 学号唯一标识  整型、主键 
StuWaine 学生姓名  字符串型
StuSex 学生性别  bool型 
MajarId 专业号  整型 
StuAge 学生年龄  整型 
教师表teacher
Teald  教师编号  整型、主键 
TeaName 教师姓名  字符串型 
TeaAge 教师年龄  整型 
TeaCourse 所授课程号 整型、外键couse (Courseld) 
课程表course
Courseld 课程编号  整型 、主键 
CourseName 课程名称  字符串型 
CourseCredit 课程学分  数值型 
CourseTeacher 课程教师编号 整型、外键teacher (Teald) 
CourseTime 授课时|旬  日期型 
选课表Elective
EleStuId 选课学生学号 整型、外键student (stuld) 
EleCourseld 课程号  整型、外键course (Courseld)
EleScore 考试成绩  数值型 

“张大民(教师名)”讲授的课程名和在这些课程中考试起过90分的学生的学号及姓名,按分数的 降序排列。查询语句如下: 
Select course. courseWame, student. Stuid, student. StuName from student, teacher, course, elective wherestudent. Stuid=elective. EleStuid and teacher. teaId=course. courseTeacher andCourse. courseId=elective. eleCourseld and teacher=‘张大民’and elective. EleScore>90 order by elective. EleScore DESC

【答案解析】