如果你对其他数据库原理的实验感兴趣,请考虑阅读我的专栏
SQL Server实验系列
实验四 数据更新和视图
实验目的:
1.熟练掌握SQL的常用数据更新操作。
2.熟练应用INSERT,UPDATE,DELETE语句。
3.掌握更新操作的各种格式。
4.掌握视图的创建、更新、删除和查询。
实验过程:
1)插入如下学生记录(学号:95030,姓名:李莉,年龄:18);
INSERT INTO Student(Sno,Sname,Sage) VALUES (95030, '李莉', 18)
- 1
2)插入如下选课记录(95030,1);
INSERT INTO SC (sno,cno) VALUES (95030,1)
- 1
3)计算机系学生年龄改成20;
UPDATE Student SET Sage=20 WHERE Sdept='CS'
- 1
4)数学系所有学生成绩改成0;
UPDATE SC
SET Grade=0
WHERE Sno IN (
SELECT SNO
FROM student
WHERE Sdept = 'MA'
)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
5)把低于总平均成绩的女同学成绩提高5分;
UPDATE SC
SET Grade = Grade + 5
WHERE grade < ( select avg(grade) from sc)
AND sno IN( select sno from student where ssex = '女')
- 1
- 2
- 3
- 4
6)修改2号课程的成绩,若成绩小于75分提高5%,成绩大于75时提高4%(两个语句实现,注意顺序);
UPDATE SC
SET Grade = Grade + Grade*0.05
WHERE grade < 75 AND cno = 2
UPDATE SC
SET Grade = grade + grade*0.04
WHERE grade > 75 AND cno =2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
7)删除95030学生信息;
DELETE FROM student
WHERE Sno=95030
- 1
- 2
8)删除SC表中无成绩的记录;
DELETE FROM sc
WHERE grade IS NULL
- 1
- 2
9)删除张娜的选课记录;
DELETE FROM SC
WHERE SNO = (select sno from student where sname = '张娜')
- 1
- 2
10)删除数学系所有学生选课记录;
DELETE FROM sc
WHERE sno IN (
SELECT sno
FROM student
WHERE sdept='MA'
)
- 1
- 2
- 3
- 4
- 5
- 6
11)删除不及格的学生选课记录;
DELETE FROM sc
WHERE Grade < 60;
- 1
- 2
12)查询每一门课程成绩都大于等于80分的学生学号、姓名和性别,把值送往另一个已经存在的基本表STU(SNO,SNAME,SSEX)中;
--创建表 stu
CREATE TABLE STU(
sno varchar(8) PRIMARY KEY,
sname varchar(4) NOT NULL,
ssex VARCHAR(2) DEFAULT '男' CHECK(ssex='男' OR SSEX='女')
)
--插入数据
INSERT INTO STU (sno,sname,ssex)
SELECT sno,sname,ssex
FROM Student
WHERE sno IN (
SELECT sno
FROM SC
WHERE grade >= 80
)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
13)把所有学生学号和课程号连接追加到新表中;
INSERT INTO STU (sno,cno)
SELECT student.sno,sc.cno
FROM student,sc
WHERE student.sno = sc.sno
- 1
- 2
- 3
- 4
14)所有学生年龄增1;
UPDATE student
SET Sage = sage +1
- 1
- 2
15)统计3门以上课程不及格的学生把相应的学生姓名、系别追加到另外一个表中。
insert into stu(sname,sdept)
select sname,sdept
from student,sc
where student.sno=(
select sno
from sc
where grade<60
group by sno
having count(*)>3
);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
16)将学生学号、总成绩、平均成绩定义成一个视图,以便于查询。
go
CREATE VIEW stu_grade(sno,sum_grade,avg_grade) as
SELECT s1.Sno,sum(s2.Grade),avg(s2.grade)
FROM STUDENT s1,sc s2
WHERE s1.sno = s2.Sno
GROUP BY s1.Sno
go
- 1
- 2
- 3
- 4
- 5
- 6
- 7
17)将Student表中所有女生记录定义为一个视图F_STU,并限制对视图的更新操作不能超过视图条件限制。
CREATE VIEW F_STU as
SELECT sno,sname,ssex,sage,sdept
FROM student
WHERE ssex='女'
WITH CHECK OPTION
go
- 1
- 2
- 3
- 4
- 5
- 6
18)将上一题建立的F_STU视图,更改为给所有男生记录定义的视图,属性包括学号、性别、年龄、所选课程号。
go
alter VIEW F_STU
as
SELECT s1.sno,s1.Sname,s1.Ssex,s1.Sage,s2.Cno
FROM STUDENT s1,SC s2
WHERE s1.sno = s2.Sno AND s1.Ssex='男'
go
- 1
- 2
- 3
- 4
- 5
- 6
- 7
19)在上一题的视图中找出选修了3号课程的学生。
SELECT *
FROM F_STU
WHERE cno=3
- 1
- 2
- 3
20)删除视图F_STU。
DROP VIEW F_STU
- 1