数据库原理及应用上机实验四

实验名称:实验四, 数据更新和视图

 

实验目的

1.熟练掌握SQL的常用数据更新操作。 2.熟练应用INSERT,UPDATE,DELETE语句。 3.掌握更新操作的各种格式。 4.掌握视图的创建、更新、删除和查询。

 

实验步骤与调试过程(请用简单的文字描述)

(1)插入如下学生记录(学号:95030,姓名:李莉,年龄:18);
(2)插入如下选课记录(95030,1);
(3)计算机系学生年龄改成20;
(4)数学系所有学生成绩改成0;
(5)把低于总平均成绩的女同学成绩提高5分;
(6)修改2号课程的成绩,若成绩小于75分提高5%,成绩大于75时提高4%(两个语句实现,注意顺序);
(7)删除95030学生信息;
(8)删除SC表中无成绩的记录;
(9)删除张娜的选课记录;
(10)删除数学系所有学生选课记录;
(11)删除不及格的学生选课记录;
(12)查询每一门课程成绩都大于等于80分的学生学号、姓名和性别,把值送往另一个已经存在的基本表STU(SNO,SNAME,SSEX)中;
(13)把所有学生学号和课程号连接追加到新表中;
(14)所有学生年龄增1;
(15)统计3门以上课程不及格的学生把相应的学生姓名、系别追加到另外一个表中。
(16)将学生学号、总成绩、平均成绩定义成一个视图,以便于查询。
(17)将Student表中所有女生记录定义为一个视图F_STU,并限制对视图的更新操作不能超过视图条件限制。
(18)将上一题建立的F_STU视图,更改为给所有男生记录定义的视图,属性包括学号、性别、年龄、所选课程号。
(19)在上一题的视图中找出选修了3号课程的学生。
(20)删除视图F_STU。

 

实验结果(上传实验结果截图或者简单文字描述)

1. 删除主键表数据如果有外键约束就会报错。

2. 插入数据用insert into 表直接+表。

3. 更新用update。

4. 删除直接用delete 可以直接删除一行数据。

5.操作视图的时候要用到create view。

 

疑难小结

1.修改数据时,如果省略where自子句,则表示要修改表中的所有元组,一开始不知道这个地方,错了好几次。
2.带子查询的修改语句,因为有update有where语句,而where子句后面可以跟子查询,所以子查询也可以嵌套在update语句中,用以构造执行修改操作的条件。
3.进行视图操作的时候,一开始不是很熟悉过程,然后看了老师发的课件。课件里面有讲解,然后才做的实验。

 

实验详细操作过程或程序清单

(1)插入如下学生记录(学号:95030,姓名:李莉,年龄:18)

insert into student(sno,sname,sage)
values ('95030','李莉',18)

(2)插入如下选课记录(95030,1)

insert into sc(sno,cno)
values('95030',1)

(3)计算机系学生年龄改成20

update student
set sage=20
where sdept='CS'

(4)把数学系所有学生成绩改成0

update sc
set grade=0
where 'MA'=
(select sdept
from student
where student.sno=sc.sno)

(5)把低于总平均成绩的女同学成绩提高5分

update sc 
set grade+=5
where grade<
(select avg(grade) 
from sc inner join student
on student.sno=sc.sno
where ssex='女')

(6)修改2号课程的成绩,若成绩小于75分提高5%,成绩大于75时提高4%(两个语句实现,注意顺序)
update sc
set grade=grade*(1+0.05)
where cno='002' and grade<75;

update sc 
set grade=grade*(1+0.04)
where cno='002' and grade>75;

(7)删除95030学生信息

delete
from student
where sno='95030'

(8)删除SC表中无成绩的记录

delete 
from sc
where grade is null;

(9)删除张娜的选课记录

delete
from sc
where sno=(select sno from student 
where sname='张娜')

(10)删除数学系所有学生选课记录

delete
from sc
where sno in (select sno from student where sdept='MA')

(11)删除不及格的学生选课记录

delete
from sc
where grade<60

(12)查询每一门课程成绩都大于等于80分的学生学号、姓名和性别,把值送往另一个已经存在的基本表STU(SNO,SNAME,SSEX)中

create table STU 
(sno char(8), 
sname char(8), 
ssex char(2) 
)

insert into STU(sno,sname,ssex)
select distinct student.sno,sname,ssex
from student,sc 
where student.sno not in
(select sno from sc where grade<80) and student.sno=sc.sno

(13)把所有学生学号和课程号连接追加到新表中

create table stu1
(
sno char(8),
cno char(3)
);
insert into stu1(sno,cno)
select sno,cno
from sc;

(14)所有学生年龄增1

update student
set sage=sage+1;

(15)统计3门以上课程不及格的学生把相应的学生姓名、系别追加到另外一个表中

create table stu2
(
sname char(8),
sdept char(20)
);
insert into stu2(sname,sdept)
select sname,sdept
from student
where sno in
(
select distinct sno
from sc
where grade<60
group by sno
having count(grade)>=3
); 

(16)将学生学号、总成绩、平均成绩定义成一个视图,以便于查询。

create view grade_sum_avg
as
 select sno,sum(grade) as totalgrade,avg(grade) as avg_grade
 from  sc
 group by sno;
 
(17)将Student表中所有女生记录定义为一个视图F_STU,并限制对视图的更新操作不能超过视图条件限制。
 
create view F_STU(sno,name,dept,sex,age) 
    as
        select *
        from student
        where ssex='女';
        with check option;
        
(18)将上一题建立的F_STU视图,更改为给所有男生记录定义的视图,属性包括学号、性别、年龄、所选课程号。 

alter view F_STU(sno,ssex,sage,cno)
   as
     select student.sno,ssex,sage,cno from student,sc
     where student.sno=sc.sno and ssex='男'
     
(19)在上一题的视图中找出选修了3号课程的学生。     

select    F_STU.sno,sname,cno
from      F_STU,sc
where     F_STU.sno=sc.sno and
          sc.cno='3';
          
(20)删除视图F_STU          

drop view F_STU;

 

你可能感兴趣的:(SQL,SQL上机实验)