教学管理数据库有以下四张表
1.学生表 (Student) 包含:学号(StudentId)、姓名(Name)、系(Department)、班级(Class)、性别(Gender)、年龄(Age)。
js
CREATE TABLE Student (
StudentId NUMBER(8), -- 学号
Name VARCHAR(20) NOT NULL, -- 姓名
Department VARCHAR(50), -- 系
Class VARCHAR(20), -- 班级
Gender VARCHAR(4), -- 性别
Age NUMBER(3), -- 年龄
PRIMARY KEY (StudentId) -- 主键约束
);
2.课程表 (Course) 包含:课程 ID(CourseId)、课程名称(Name)、学分(Credits)、学时数(LectureHours)。
js
CREATE TABLE Course (
CourseId NUMBER(8), -- 课程ID
Name VARCHAR(50) NOT NULL, -- 课程名称
Credits NUMBER(4,1), -- 学分
LectureHours NUMBER(3), -- 学时数
PRIMARY KEY (CourseId) -- 主键约束
);
3.教师表 (Teachers) 包含:教师 ID(TeacherId)、姓名(Name)、性别(Gender)、职称(Title)、所属院系(Department)、课程号(CourseId)、授课日期(TeachingDate)。
js
CREATE TABLE Teachers (
TeacherId NUMBER(8), -- 教师ID
Name VARCHAR(20) NOT NULL, -- 姓名
Gender VARCHAR(4), -- 性别
Title VARCHAR(20), -- 职称
Department VARCHAR(50), -- 所属院系
CourseId NUMBER(8), -- 课程号(外键)
TeachingDate DATE, -- 授课日期
PRIMARY KEY (TeacherId), -- 主键约束
FOREIGN KEY (CourseId) REFERENCES Course(CourseId) -- 外键约束
);
4.成绩表 (Grades) 包含:成绩 ID(GradeId)、学号(StudentId)、课程 ID(CourseId)、分数(Score)。
js
CREATE TABLE Grades (
GradeId NUMBER(8), -- 成绩ID
StudentId NUMBER(8) NOT NULL, -- 学号(外键)
CourseId NUMBER(8) NOT NULL, -- 课程ID(外键)
Score NUMBER(5,2), -- 分数
PRIMARY KEY (GradeId), -- 主键约束
FOREIGN KEY (StudentId) REFERENCES Student(StudentId), -- 外键约束
FOREIGN KEY (CourseId) REFERENCES Course(CourseId) -- 外键约束
);
5.创建一个用户视图v_age,只允许该用户查询女生情况
CREATE VIEW
部分:
-
CREATE VIEW
v_age:创建一个名为 v_age 的视图 -
AS
:视图定义开始
SELECT
部分:
-
SELECT
*:选择所有列 -
FROM
Student s:从学生表查询,使用别名 s
WHERE
部分:
WHERE
s.Gender = '女':筛选性别为女的记录
js
CREATE VIEW v_age AS
SELECT *
FROM Student s
WHERE s.Gender = '女';
6.创建CS系学生视图v_information,并要求进行修改和插入还需要保证只有CS系的学生
CREATE VIEW
部分:
-
CREATE VIEW
v_information:创建一个名为 v_information 的视图 -
AS
:视图定义开始
SELECT
部分:
-
SELECT
*:选择所有列 -
FROM
Student s:从学生表查询,使用别名 s
WHERE
部分:
WHERE
s.Department = 'CS':筛选CS系的学生
WITH CHECK OPTION
:
-
确保通过视图插入或修改的数据必须满足视图的条件
-
即只能插入或修改CS系的学生信息
js
CREATE VIEW v_information AS
SELECT *
FROM Student s
WHERE s.Department = 'CS'
WITH CHECK OPTION;
7.创建由学号和平均成绩组成的视图student_gr(使用别名更改属性名)
CREATE VIEW
部分:
-
CREATE VIEW
student_gr:创建一个名为 student_gr 的视图 -
AS
:视图定义开始
SELECT
部分:
-
g.StudentId
AS
学号:学生学号,使用中文别名 -
AVG(g.Score)
AS
平均成绩:计算平均成绩,使用中文别名
FROM
部分:
FROM
Grades g:从成绩表查询,使用别名 g
GROUP BY
部分:
-
GROUP BY
g.StudentId:按学生学号分组 -
计算每个学生的平均成绩
js
CREATE VIEW student_gr AS
SELECT g.StudentId AS 学号,
AVG(g.Score) AS 平均成绩
FROM Grades g
GROUP BY g.StudentId;
8.创建包含学生姓名和平均成绩的视图student_avg
CREATE VIEW
部分:
-
CREATE VIEW
student_avg:创建一个名为 student_avg 的视图 -
AS
:视图定义开始
SELECT
部分:
-
s.Name
AS
姓名:学生姓名,使用中文别名 -
AVG(g.Score)
AS
平均成绩:计算平均成绩,使用中文别名
FROM
部分:
-
FROM
Student s:从学生表查询,使用别名 s -
JOIN
Grades g:连接成绩表,使用别名 g -
USING
(StudentId):通过学生学号连接两个表
GROUP BY
部分:
-
GROUP BY
s.Name:按学生姓名分组 -
计算每个学生的平均成绩
js
CREATE VIEW student_avg AS
SELECT s.Name AS 姓名,
AVG(g.Score) AS 平均成绩
FROM Student s
JOIN Grades g
USING (StudentId)
GROUP BY s.Name;
9.创建包含课程名称和平均成绩的视图course_avg
CREATE VIEW
部分:
-
CREATE VIEW
course_avg:创建一个名为 course_avg 的视图 -
AS
:视图定义开始
SELECT
部分:
-
c.Name
AS
课程名称:课程名称,使用中文别名 -
AVG(g.Score)
AS
平均成绩:计算平均成绩,使用中文别名
FROM
部分:
-
FROM
Course c:从课程表查询,使用别名 c -
JOIN
Grades g:连接成绩表,使用别名 g -
USING
(CourseId):通过课程编号连接两个表
GROUP BY
部分:
-
GROUP BY
c.Name:按课程名称分组 -
计算每门课程的平均成绩
js
CREATE VIEW course_avg AS
SELECT c.Name AS 课程名称,
AVG(g.Score) AS 平均成绩
FROM Course c
JOIN Grades g
USING (CourseId)
GROUP BY c.Name;
10.创建包含系别和平均成绩的视图dept_avg
CREATE VIEW
部分:
-
CREATE VIEW
dept_avg:创建一个名为 dept_avg 的视图 -
AS
:视图定义开始
SELECT
部分:
-
s.Department
AS
系别:系别名称,使用中文别名 -
AVG(g.Score)
AS
平均成绩:计算平均成绩,使用中文别名
FROM
部分:
-
FROM
Student s:从学生表查询,使用别名 s -
JOIN
Grade g:连接成绩表,使用别名 g -
USING
(StudentId):通过学生学号连接两个表
GROUP BY
部分:
-
GROUP BY
s.Department:按系别分组 -
计算每个系的平均成绩
js
CREATE VIEW dept_avg AS
SELECT s.Department AS 系别,
AVG(g.Score) AS 平均成绩
FROM Student s
JOIN Grade g
USING (StudentId)
GROUP BY s.Department;