数据库编程应用--创建专题1

教学管理数据库有以下四张表

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,只允许该用户查询女生情况

  1. CREATE VIEW 部分:
  • CREATE VIEW v_age:创建一个名为 v_age 的视图

  • AS:视图定义开始

  1. SELECT 部分:
  • SELECT *:选择所有列

  • FROM Student s:从学生表查询,使用别名 s

  1. WHERE 部分:
  • WHERE s.Gender = '女':筛选性别为女的记录
js 复制代码
CREATE VIEW v_age AS
SELECT * 
FROM Student s
WHERE s.Gender = '女';

6.创建CS系学生视图v_information,并要求进行修改和插入还需要保证只有CS系的学生

  1. CREATE VIEW 部分:
  • CREATE VIEW v_information:创建一个名为 v_information 的视图

  • AS:视图定义开始

  1. SELECT 部分:
  • SELECT *:选择所有列

  • FROM Student s:从学生表查询,使用别名 s

  1. WHERE 部分:
  • WHERE s.Department = 'CS':筛选CS系的学生
  1. WITH CHECK OPTION
  • 确保通过视图插入或修改的数据必须满足视图的条件

  • 即只能插入或修改CS系的学生信息

js 复制代码
CREATE VIEW v_information AS
SELECT *
FROM Student s
WHERE s.Department = 'CS'
WITH CHECK OPTION;

7.创建由学号和平均成绩组成的视图student_gr(使用别名更改属性名)

  1. CREATE VIEW 部分:
  • CREATE VIEW student_gr:创建一个名为 student_gr 的视图

  • AS:视图定义开始

  1. SELECT 部分:
  • g.StudentId AS 学号:学生学号,使用中文别名

  • AVG(g.Score) AS 平均成绩:计算平均成绩,使用中文别名

  1. FROM 部分:
  • FROM Grades g:从成绩表查询,使用别名 g
  1. 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

  1. CREATE VIEW 部分:
  • CREATE VIEW student_avg:创建一个名为 student_avg 的视图

  • AS:视图定义开始

  1. SELECT 部分:
  • s.Name AS 姓名:学生姓名,使用中文别名

  • AVG(g.Score) AS 平均成绩:计算平均成绩,使用中文别名

  1. FROM 部分:
  • FROM Student s:从学生表查询,使用别名 s

  • JOIN Grades g:连接成绩表,使用别名 g

  • USING (StudentId):通过学生学号连接两个表

  1. 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

  1. CREATE VIEW 部分:
  • CREATE VIEW course_avg:创建一个名为 course_avg 的视图

  • AS:视图定义开始

  1. SELECT 部分:
  • c.Name AS 课程名称:课程名称,使用中文别名

  • AVG(g.Score) AS 平均成绩:计算平均成绩,使用中文别名

  1. FROM 部分:
  • FROM Course c:从课程表查询,使用别名 c

  • JOIN Grades g:连接成绩表,使用别名 g

  • USING (CourseId):通过课程编号连接两个表

  1. 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

  1. CREATE VIEW 部分:
  • CREATE VIEW dept_avg:创建一个名为 dept_avg 的视图

  • AS:视图定义开始

  1. SELECT 部分:
  • s.Department AS 系别:系别名称,使用中文别名

  • AVG(g.Score) AS 平均成绩:计算平均成绩,使用中文别名

  1. FROM 部分:
  • FROM Student s:从学生表查询,使用别名 s

  • JOIN Grade g:连接成绩表,使用别名 g

  • USING (StudentId):通过学生学号连接两个表

  1. 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;
相关推荐
2301_802502333 小时前
哈工大计算机系统2025大作业——Hello的程序人生
数据库·程序人生·课程设计
Alan3167 小时前
Qt 中,设置事件过滤器(Event Filter)的方式
java·开发语言·数据库
TDengine (老段)8 小时前
TDengine 集群容错与灾备
大数据·运维·数据库·oracle·时序数据库·tdengine·涛思数据
Lao A(zhou liang)的菜园8 小时前
高效DBA的日常运维主题沙龙
运维·数据库·dba
迪迦不喝可乐9 小时前
mysql知识点
数据库·mysql
不太可爱的大白9 小时前
MySQL 事务的 ACID 四大特性及其实现原理
数据库·mysql
观测云10 小时前
HikariCP 可观测性最佳实践
数据库
文牧之11 小时前
PostgreSQL的扩展 dblink
运维·数据库·postgresql
趁你还年轻_11 小时前
Redis-旁路缓存策略详解
数据库·redis·缓存
在云上(oncloudai)11 小时前
AWS DocumentDB vs MongoDB:数据库的技术抉择
数据库·mongodb·aws