一. 实验目的

 

1.掌握创建视图的 SQL 语句,数据更新的 SQL 语句。

2.了解使用创建视图向导创建视图的方法。

3.掌握使用 SQL 创建视图的方法,使用 SQL 更新数据的方法。

 

二. 实验准备

1.了解创建视图与数据更新的方法。

2.掌握创建视图与数据更新的 SQL 语句的语法格式。

3.了解删除视图与数据更新的 SQL 语句的用法。

 

三. 实验要求

1. 用不同的方法创建视图,练习数据更新。

2. 提交实验报告,并验收实验结果。

 

四. 实验内容 

1)定义计算机系学生基本情况视图 V_Computer; 
USE stsc
GO
CREATE VIEW V_Computer
AS
SELECT * 
FROM Student

2)将 student, course 表和 score 表中学生的学号,姓名,课程号,课程名,成绩定义为视图 V_S_C_G;
USE stsc
GO
CREATE VIEW V_S_C_G
AS
SELECT Student.stno, Student.stname, Course.cname ,Score.grade
FROM Student,Score,Course

3)将各系学生人数,平均年龄定义为视图 V_NUM_AVG; 
USE stsc
GO
CREATE VIEW V_NUM_AVG("系名","平均人数", "平均年龄")
AS
SELECT speciality, COUNT(*), AVG(year(getdate())-year(stbrithday))
FROM Student
GROUP BY speciality

4)定义一个反映学生出生年份的视图 V_YEAR; 
USE stsc
GO
CREATE VIEW V_Year("出生日期")
AS
SELECT stbrithday
FROM Student

5)将各位学生选修课程的门数及平均成绩定义为视图 V_AVG_S_G; 
USE stsc
GO
CREATE VIEW V_AVG_S_G("学号", "选修门数", "平均成绩")
AS
SELECT Student.stno, COUNT(*), AVG(Score.grade)
FROM Student, Score
WHERE Score.stno = Student.stno
GROUP BY Student.stno


6)将各门课程的选修人数及平均成绩定义为视图 V_AVG_C_G。 
USE stsc
GO
CREATE VIEW V_AVG_C_G("课程号", "平均成绩")
AS
SELECT Course.cno, AVG(Score.grade)
FROM Course, Score
WHERE Score.cno = Course.cno
GROUP BY Course.cno

2.查询视图 
1)通过查询 V_AVG_S_G 视图得到平均成绩为 90 分以上的学生的学号和成绩;

USE stsc
SELECT *
FROM V_AVG_S_G
WHERE "平均成绩" >= 90

2)通过查询 V_NUM_AVG 视图得到人数超过 10 人,且平均年龄在 18 岁以上的院系;
USE stsc
SELECT *
FROM V_NUM_AVG
WHERE "平均年龄" >= 18 AND "平均人数" >= 10

3.删除视图 
使用 SQL 语句删除视图 V_YEAR。 
USE stsc
DROP VIEW V_Year


4.数据更新 

(1)将一个新学生记录(学号:XX(根据自己定义的学号修改);姓名:陈冬;性别: 男;所在系:XX(根据自己定义的系名修改);年龄:18)插入 student 表中; 
USE stsc
INSERT INTO Student values
('122009', '陈冬', '男', '1992-11-23', '计算机', 50)
(2)插入一条选课记录:学号为 200215126 的学生选修了 1 号课程;
USE stsc
INSERT INTO Score values
('200215126 ', '102', NULL)
 

(3)将学生 XX(根据自己定义的学号修改)所在系改为其他系别(例如:数学系, 具体地,根据自己定义的系名修改); 
USE stsc
UPDATE Student SET speciality = '通信'
WHERE stno = '121002'
(4)删除学号为 XX 的学生记录; 
USE stsc
DELETE FROM Student
WHERE stno = '121002'
(5)删除 XX 系(根据自己定义的系名修改)所有学生。
USE stsc
DELETE FROM Student
WHERE Student.speciality = '通信'