2021HFUT数据库实验九 视图的定义与使用

一.实验目的

  1. 熟悉和掌握对数据表中视图的查询操作和 SQL 语句的使用;
  2. 熟悉和掌握对数据表中视图的更新操作和 SQL 语句的使用,并注意视图更新与基本
    表更新的区别与联系;
  3. 学习灵活熟练的进行视图的操作,认识视图的作用。

二.实验准备

  1. EDUC 数据库;
  2. 复习有关视图操作的 SQL 语句。

三.实验要求

  1. 在实验开始之前做好准备工作;
  2. 思考视图和基本表的区别;
  3. 注意操作结果的截图与保存,供撰写实验报告使用。

四.实验内容

  1. 定义视图
    在 EDUC 数据库中,已 Student、Course 和 SC 表为基础完成一下视图定义:
  1. 定义视图 V_SC_G:该视图包含 Student、 Course 和 SC 表中学生的学号、姓名、课程号、课程名和成绩;
  2. 定义一个反映学生出生年份的视图 V_YEAR,该视图要求使用系统函数来获取当前日期及转换;
  3. 定义视图 V_AVG_S_G:该视图将反映学生选修课程的门数及平均成绩;
  4. 定义视图 V_AVG_C_G:该视图将统计各门课程的选修人数及平均成绩。
  1. 使用视图
  1. 查询以上所建的视图结果;
  2. 查询平均成绩为 90 分及以上的学生学号、姓名和成绩;
  3. 查询科目成绩大于平均成绩的学生学号、课程号、成绩和平均成绩;
  4. 查询 1995 年出生的学生学号和姓名。

五、实验步骤

--定义视图 V_SC_G:该视图包含 Student、 Course 和 SC 表中学生的学号、姓名、课程号、课程名和成绩
create view V_SC_G(Sno,Sname,Cno,Cname,Score)
as
select student.sno,Sname,course.Cno,Cname,Score
from student,course,sc
where student.Sno=sc.Sno and course.Cno=sc.Cno;

--定义一个反映学生出生年份的视图 V_YEAR,该视图要求使用系统函数来获取当前日期及转换
create view V_YEAR(Sno,Sname,Sbirth)
as
select Sno,Sname,year(GETDATE())-Sage
from student;

--定义视图 V_AVG_S_G:该视图将反映学生选修课程的门数及平均成绩
create view V_AVG_S_G(Sno,classcount,avescore)
as
select Sno,count(*),AVG(Score)
from sc
group by Sno;

--定义视图 V_AVG_C_G:该视图将统计各门课程的选修人数及平均成绩
create view V_AVG_C_G(Cno,studentcount,avescore)
as
select sc.Sno,count(sc.Sno),AVG(score)
from sc,student,course
where sc.Sno=student.Sno and sc.Cno=course.Cno
group by sc.Cno;
--查询平均成绩为 90 分及以上的学生学号、姓名和成绩
select V_SC_G.Sno,Sname,Score
from V_SC_G,V_AVG_S_G
where avescore>90 and V_SC_G.Sno=V_AVG_S_G.Sno;

--查询科目成绩大于平均成绩的学生学号、课程号、成绩和平均成绩
select distinct V_SC_G.Sno,V_AVG_C_G.Cno,sc.Score,avescore
from V_SC_G,V_AVG_C_G,sc
where V_SC_G.Sno=sc.Sno
and V_AVG_C_G.Cno=sc.Cno
and sc.Score>V_AVG_C_G.avescore;

--查询 1995 年出生的学生学号和姓名
select V_YEAR.Sno,Sname
from V_YEAR,student
where V_YEAR.Sbirth=1995 and V_YEAR.Sno=student.Sno;
上一篇:SQL Server 优化


下一篇:postgresql group by 报错