专业课程综合实训II 记录-专题一、二¶
一、创建数据库和数据表¶
md这呆B文档,字段类型不用标准类型,命名规范不统一,同样是 xno,有的用字符串有的用数字我服了。
有空我改一改改得统一一些。
利用 CREATE
命令 创建6张表(表结构如下):
- 学生基本信息表 student
字段名 | 字段类型 | 约束条件 | 字段含义说明 |
---|---|---|---|
sno | varchar(8) | Primary key | 学号 |
sname | varchar(8) | Not null | 姓名 |
ssex | varchar(2) | '男' 或 '女' | 性别 |
sbirthday | date | 出生日期 | |
classno | varchar(6) | Foreign key | 班级号 |
totalcredit | smallint | 初值为 0 | 已选修的总学分 |
- 班级信息表 class
字段名 | 字段类型 | 约束条件 | 字段含义说明 |
---|---|---|---|
classno | varchar(6) | Primary key | 班级号 |
classname | varchar(20) | Not null | 班级名称 |
classmajor | varchar(20) | 所属专业 | |
classdept | varchar(20) | 所属系别 | |
studentnumber | smallint | [20..40] | 学生数 |
- 课程信息表 course
字段名 | 字段类型 | 约束条件 | 字段含义说明 |
---|---|---|---|
cno | varchar(6) | Primary key | 课程号 |
cname | varchar(30) | Not null | 课程名称 |
ccredit | smallint | [1..4] | 学分 |
- 选修课程信息表 sc
字段名 | 字段类型 | 约束条件 | 字段含义说明 |
---|---|---|---|
sno | varchar(8) | Foreign key | 学号 |
cno | varchar(6) | Foreign key | 课程号 |
grade | integer | [0..100] | 成绩 |
- 教师信息表 teacher
字段名 | 字段类型 | 约束条件 | 字段含义说明 |
---|---|---|---|
tno | integer | Primary key | 教师号 |
tname | varchar(8) | Not null | 教师姓名 |
tsex | varchar(2) | '男' 或 '女' | 性别 |
tbirthday | date | 出生日期 | |
ttitle | varchar(20) | 职称 |
- 教师任课情况表 teaching
字段名 | 字段类型 | 约束条件 | 字段含义说明 |
---|---|---|---|
tno | integer | Foreign key | 教师号 |
cno | varchar(6) | Foreign key | 课程号 |
language | varchar(10) | 'Chinese' 或 'Bilingual' 或 English | 授课语言 |
可以得到表的引用关系,如下图:
---
title: 表的引用关系
---
classDiagram
class Class {
classno
classname
classmajor
classdept
studentnumber
}
class Student {
sno
sname
ssex
sbirthday
classno
Totalcredit
}
Class <-- Student
class Course {
cno
cname
ccredit
}
Student <-- Sc
Course <-- Sc
class Sc {
sno
cno
grade
}
class Teacher {
tno
tname
tsex
tbirthday
ttitle
}
Teacher <-- Teaching
Course <-- Teaching
class Teaching {
tno
cno
language
}
按照顺序依次创建六张表:
PostgreSQL SQL Dialect | |
---|---|
PostgreSQL SQL Dialect | |
---|---|
PostgreSQL SQL Dialect | |
---|---|
PostgreSQL SQL Dialect | |
---|---|
PostgreSQL SQL Dialect | |
---|---|
PostgreSQL SQL Dialect | |
---|---|
二、利用 INSERT 命令向六张表中插入数据¶
- class 表内容
classno | classname | classmajor | classdept | studentnumber |
---|---|---|---|---|
'Rj0801' | '软件 0801' | '软件工程' | '软件开发' | 24 |
'Rj0802' | '软件 0802' | '软件工程' | '软件开发' | 26 |
'Rj0803' | '软件 0803' | '软件工程' | '数字媒体' | 25 |
'Rj0804' | '软件 0804' | '软件工程' | '软件开发' | 25 |
'Rj0805' | '软件 0805' | '软件工程' | '数字媒体' | 24 |
'Rj0806' | '软件 0806' | '软件工程' | '软件开发' | 24 |
- student 表内容
sno | sname | ssex | sbirthday | classno |
---|---|---|---|---|
'08300010' | '李在' | '男' | '1991-10-1' | 'Rj0801' |
'08300012' | '葛畅' | '男' | '1990-8-8' | 'Rj0801' |
'08300015' | '刘晶' | '女' | '1990-5-22' | 'Rj0801' |
'08300020' | '杨敏' | '女' | '1989-1-8' | 'Rj0801' |
'08300030' | '胡贤斌' | '男' | '1990-10-8' | 'Rj0801' |
'08300048' | '赵鸿泽' | '男' | '1989-6-6' | 'Rj0802' |
'08300050' | '王威' | '男' | '1990-6-10' | 'Rj0802' |
'08300067' | '赵玮' | '女' | '1990-8-21' | 'Rj0803' |
'08300075' | '王娜娜' | '女' | '1991-9-23' | 'Rj0803' |
'08300088' | '秦键' | '男' | '1989-3-1' | 'Rj0803' |
'08300100' | '田邦仪' | '女' | '1990-2-26' | 'Rj0804' |
'08300148' | '赵心砚' | '男' | '1991-4-25' | 'Rj0805' |
'08300150' | '杨青' | '女' | '1989-11-15' | 'Rj0805' |
'08300160' | '杨玲玲' | '女' | '1990-12-12' | 'Rj0806' |
- course 表内容
cno | cname | ccredit |
---|---|---|
'800001' | '计算机基础' | 4 |
'800002' | '程序设计语言' | 4 |
'800003' | '数据结构' | 4 |
'810011' | '数据库系统' | 4 |
'810013' | '计算机网络' | 3 |
'810015' | '微机原理与应用' | 4 |
PostgreSQL SQL Dialect | |
---|---|
- sc 表内容
sno | cno | grade |
---|---|---|
'08300012' | '800003' | 88 |
'08300015' | '800003' | |
'08300020' | '800003' | 81 |
'08300030' | '800003' | 78 |
'08300048' | '800003' | 95 |
'08300100' | '810011' | 67 |
'08300148' | '810011' | 58 |
'08300150' | '810011' | 89 |
'08300160' | '810011' | 71 |
PostgreSQL SQL Dialect | |
---|---|
- teacher 表内容
tno | tname | tsex | tbirthday | ttitle |
---|---|---|---|---|
'000001' | '李英' | '女' | '1975-11-3' | '讲师' |
'000002' | '王大山' | '男' | '1969-3-2' | '副教授' |
'000003' | '张朋' | '男' | '1970-2-13' | '讲师' |
'000004' | '陈为军' | '男' | '1985-8-14' | '助教' |
'000005' | '宋浩然' | '男' | '1976-4-23' | '讲师' |
'000006' | '许红霞' | '女' | '1966-2-12' | '副教授' |
'000007' | '徐永军' | '男' | '1962-1-24' | '教授' |
'000008' | '李桂菁' | '女' | '1960-12-15 | '教授' |
'000009' | '王一凡' | '女' | '1974-12-8' | '讲师' |
'000010' | '田峰' | '男' | '1988-1-18' | '助教' |
- teaching 表内容
cno | tno | language |
---|---|---|
'800001' | '000001' | 'English' |
'800002' | '000002' | 'Chinese' |
'800003' | '000002' | 'Bilingual' |
'810011' | '000003' | 'Chinese' |
'810013' | '000004' | 'English' |
'800001' | '000005' | 'Chinese' |
'800002' | '000006' | 'Chinese' |
'800003' | '000007' | 'English' |
'810011' | '000007' | 'English' |
'810013' | '000008' | 'Bilingual' |
三、简单的数据操作 24 条¶
- 查询所有同学的所有基本信息。
PostgreSQL SQL Dialect | |
---|---|
查询结果:
- 查询所有男同学的学号、姓名、出生日期
PostgreSQL SQL Dialect | |
---|---|
查询结果:
Text Only | |
---|---|
- 在基本表 student 中增加 addr:varchar(20)列,然后将其长度由 20 改为 25
PostgreSQL SQL Dialect | |
---|---|
PostgreSQL SQL Dialect | |
---|---|
- 在基本表 student 中增加 register_date:date 列,并为其设置默认值为当前系统时间,再删除该列
PostgreSQL SQL Dialect | |
---|---|
PostgreSQL SQL Dialect | |
---|---|
- 在基本表 student 中为 age: integer 列,增加默认值为 18
PostgreSQL SQL Dialect | |
---|---|
- 在基本表
scstudent 中将 sname 设置为唯一值(unique)
你妈的 sc 表哪来的 sname
PostgreSQL SQL Dialect | |
---|---|
- 基本表
coursesc 中创建索引:(sno,cno DESC)
你妈的 course 表哪来的 sno
PostgreSQL SQL Dialect | |
---|---|
- 在基本表 student 中增加约束条件:男生年龄小于 23 岁,女生年龄小于 21 岁。
PostgreSQL SQL Dialect | |
---|---|
- 创建视图 View_80,存放成绩高于 80 分的选课信息, 显示学号、课程号和成绩,使用 with check option 选项。
PostgreSQL SQL Dialect | |
---|---|
-
在视图 View_80 中查询成绩高于 90 的选课信息。
PostgreSQL SQL Dialect -
在视图 View_80 中依次插入如下元组:
08301168,810011,87(可插入成功)会违反外键约束,hai shi
08301167,810011,78(插入不成功)
-
在视图 View_80 中依次修改如下元组:
将(08301168,810011)所对应的成绩改为 90;(可修改成功)
将(08301168,810011)所对应的成绩改为 70;(修改不成功)
-
在视图 View_80 中删除如下元组:sno=08301168,cno=810011
PostgreSQL SQL Dialect -
查询所有在“1980-01-01”之前出生的女同学的学号、姓名、性别、出生日期
-
查询所有姓“李”的男同学的学号、姓名、性别、出生日期
-
查询所有用英文授课的教师号、姓名及英语授课的门数
-
查询所有职称不是“讲师”的教师号、姓名、职称
-
查询虽然选修了课程,但未参加考试的所有同学的学号
-
查询所有考试不及格的同学的学号、成绩,并按成绩降序排列
-
查询在 1970 年出生的教师号、姓名、出生日期
-
查询各个课程号的选课人数
-
查询讲授 2 门课以上的教师号
-
查询选修了 800001 课程的学生平均分数、最低分数和最高分数
-
查询 1960 年以后出生的,职称为讲师的教师的姓名、出生日期,并按出生日期升序排列。
四、复杂数据查询 30条¶
五、用数据操作语言 DML 完成对表的更新操作 7条¶
六、存储过程 6条¶
- 创 建 一 个 能 向 学 生 表 student 中 插 入 一 条 记 录 的 存 储 过 程 insert_student,该过程需要 5 个参数,分别用来传递学号、姓名、性 别、出生日期、班级号。 写出调用存储过程 insert_student 的 SQL 语句,向数据表 student 中插 入一个新同学,并提供相应的实参值。
PostgreSQL SQL Dialect | |
---|---|
PostgreSQL SQL Dialect | |
---|---|
- 创 建 一 个 向 课 程 表 course 中 插 入 一 门 新 课 程 的 存 储 过 程 insert_course,该存储过程需要三个参数,分别用来传递课程号、课程名、学分,但允许参数“学分”的默认值为 4,即当调用存储过程 insert_course 时,未给第三个参数“学分”提供实参值时,存储过程将按默认值 4 进行运算。调用存储过程 insert_course,向课程表 course 中插入一门新课程。分两种情况(给出第三个参数和未给出第三个参数)写出相应的 SQL 命令,并比较结果。
PostgreSQL SQL Dialect | |
---|---|
PostgreSQL SQL Dialect | |
---|---|
- 创建一个名称为 query_student 的存储过程,该存储过程的功能是从 数据表 student 中根据学号查询某一同学的姓名、性别、出生日期、班级号。 调用存储过程 query_student,查询学号为“08301050”的姓名、性别、 出生日期、班级号,并写出完成此功能的 SQL 命令。
PostgreSQL SQL Dialect | |
---|---|
- 建立存储过程,输出平均成绩大于 80 分的学生的姓名、性别、年龄和平均成绩。调用该存储过程,并输出相应的结果。
- 写存储过程显示所有选择了给定学生姓名选择的全部课程的学生的学号、姓名、选课数、平均成绩、总学分
PostgreSQL SQL Dialect | |
---|---|
七、触发器 8条¶
- 创建一个当向学生表 student 中插入一新同学时能自动列出全部同学信 息的触发器 display_trigger。 执行存储过程 insert_student,向学生表中插入一个新同学,看触发器 display_trigger 是否被触发。
PostgreSQL SQL Dialect | |
---|---|
PostgreSQL SQL Dialect | |
---|---|
PostgreSQL SQL Dialect | |
---|---|
- 创建一个触发器,当向学生表 student 中插入一新同学时能自动更新(增 加 1)class 班级表中该生所在班级的总人数。
不对,nmd 是增加一,不是根据 student 表更新
PostgreSQL SQL Dialect | |
---|---|
-
略
-
略
-
略
-
写一个触发器阻止将学生成绩降低
RAISE EXCEPTION 'xxx' 即可
来自 New Bing: