数据库查询是数据库的核心操作, 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