数据库编程应用--创建专题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;
相关推荐
范什么特西11 小时前
回答知识总结04(redis)
数据库·redis·缓存
码农颜11 小时前
5.4.1 锁分类
java·数据库·mysql
云深处@12 小时前
【数据库】MySQL 入门
数据库·学习·mysql
梦远星帆12 小时前
SQLyog社区版下载
数据库·mysql·sqlyog
科力锐品牌君14 小时前
行业龙头|科力锐全链路防勒索 + 多中心容灾方案,构筑河南翔宇医疗业务安全闭环!
网络·数据库·分布式·安全·数据安全·备份
zyplayer-doc14 小时前
zyplayer-doc企业知识库能做什么:从文档创建、权限管理到AI问答的完整能力
大数据·javascript·数据库·人工智能·pdf·word
会编程的吕洞宾16 小时前
LangChain4j Tool Calling 实战:让大模型自动查数据库发邮件,一句话搞定复杂任务
数据库·人工智能
知行合一。。。16 小时前
DeepAgents--01--Agent和OpenClaw的相关概念
android·数据库
c2385617 小时前
# Mini OJ — 项目详解文档
开发语言·数据库·c++
DFT计算杂谈17 小时前
C4T交错磁体中的超导交织序向列涨落与自旋流环涨落的选择机制
大数据·数据库·人工智能