实验三 数据库多表查询、数据更新、视图

版权声明:原创文章,未经许可不能转载 https://blog.csdn.net/qq_38499625/article/details/79932049

实验内容

1、基于Student_DB数据库中的三个表StudentCourseSC进行如下的查询:

(1) 查询每个学生及其选修课情况(使用自然连接)。

select student.*,SC.* from student,SC where student.Sno=SC.Sno

 

(2) 查询每个学生的学号、姓名、选修的课程及成绩。

Select sc.sno,sname,cno,grade from student,SC where SC.Sno=student.Sno


select sc.sno,sname,cname,sc.cno,grade from student,SC,course where SC.Sno=student.Sno and Course.Cno=SC.Cno


(3) 查询选修了2号课程且成绩在80分以上的学生姓名,年龄。

select sname,sage from student,sc where SC.Cno='2' and grade>80 and SC.Sno=student.Sno

 

(4) 查询选修了课程名为数学的学生学号和姓名。

select sname,student.sno from SC,student,course where SC.Sno=student.Sno and Cname='数学'and SC.Cno=Course.Cno

 

(5) 查询与李勇在同一个系学习的学生。(用IN嵌套实现)

select * from student where Sdept in(select Sdept from student 

where Sname='李勇')

 

(6) 查询其它系中比信息系某一学生年龄大的学生姓名和年龄。(写出2种形式的查询语句)

select sname,sage from Student where Sage>any

(select Sage from student where Sdept='CS') 

and Sdept<>'IS'

 

select sname,sage from student 

where sage>

(select MAX(Sage) from Student where Sdept='IS') 

and Sdept<>'IS'

 

(7) 查询选修了课程1或者选修了课程2的学生。(写出2种形式的查询语句)

select sno from SC 

where Cno='1' union select sno

from sc where cno='2'

 

select sno from SC 

where Cno='2' union select sno

from sc where cno='1'

 

(8) 查询没有选修2号课程的学生姓名

select sname from Student 

where not exists 

(select * from SC where SC.Sno=Student.Sno and Cno='2')

 

(9) 查询选修课程1的学生集合与选修课程2的学生集合的交集

select sno from SC 

where Cno='1' intersect select sno from SC where Cno='2'

 

select sno from SC where Cno='1' and 

Sno in(select Sno from SC where Cno='2')

 

(10) 查询信息系的学生与年龄不大于19岁的学生的差集。

select * from Student where Sdept='CS'

except select * from Student where Sage<=19

 

2、用SQL语句实现Student_DB数据库中数据表的更新(给出查询语句或截图):

1删除信息系(IS)所有学生的选课记录。

delete from SC where Sno=any

(select Sno from student where Sdept='IS')

 

(2)修改Cno1的记录的课程名为数据库原理及应用

update Course set Cname ='数据库原理及应用'

where Cno='1'

 

 

 

(3)将信息系全体学生的成绩改为80

update SC set Grade ='80'

where Sno =any(

select Sno from Student

where Sdept ='IS')

 

(4)删除姓名为张立的学生记录。

delete from Student 

where Sname ='张立'

 

 

 

(5)添加学生记录,姓名为张立,学号为200215125,性别为男,年龄19,院系为信息系(IS)。

insert into Student(Sname,Sno,Ssex,Sage,Sdept)

values('张立','201215125','','19','IS')

 

 


6使用SQL增加一条记录到course表中,增加的记录内容如下:

’9’,’数据挖掘’,’1’,5

insert into Course(Cno,Cname,Cpno,Ccredit)

values('9','数据挖掘','1','5')

 


 

3、用SQL语句建立视图并对视图做相应的操作:

1)建立计算机系学生的视图CS_View(视图中包含学生表中所有属性),并要求进行修改和插入操作时仍须保证该视图只有计算机系的学生。

create view CS_View

AS select * from Student

where Sdept='CS'

 

select * from CS_View

 

(2)建立计算机系选修了’3’号课程且成绩在90分以下的学生视图CS_SC_View,并对此视图进行查询。

create view CS_SC_View 

(Sno,Sname,Ssex,Sage,Sdept,Cno,Grade)

AS select CS_View.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade

from CS_View,SC

where CS_View.Sno=sc.sno and grade <90 and Cno='3'

 

select * from CS_SC_View

 

(3)将学生的学号和平均成绩定义为一个视图。

create view sno_avg(Sno,aveGrade)

AS select Sno,AVG(Grade)

from SC

group by Sno

select * from sno_avg

 

(4)利用所建立的视图,查询选修了2号课程的计算机系的学生。

select *

from CS_View,SC

where CS_View.Sno=SC.Sno and Cno='2'

 

(5)将视图CS_View中学号为201215122的学生姓名改为刘留”,并查看Student表中此学生姓名是否有变化,如有变化请说明原因

update CS_View

set Sname='刘留'

where Sno=201215122

select * from CS_View

 

(6)向视图CS_View中插入一条新的学生记录,其中学号为201215126,姓名为李三,年龄为20岁,院系为IS,若未能执行成功,则分析下执行结果。

insert into CS_View(Sno,Sname,Sage,Sdept)

values('201215126','李三',20,'IS')

 

select * from CS_View

select * from student

 

CS_View中是仅包含信息系的学生的信息,当前插入的身份不符合该视图的要求,因此插入失败。

(7)将视图CS_View中学号为201215121的学生院系改为IS,查看Student表中此学生院系是否发生变化。 然后删除视图CS_View中学号为201215121的记录,并查看Student表中此学生是否被删除,如被删除请说明原因。

update CS_View

set Sdept='IS'

where Sno = 201215121

select * from CS_View

select * from Student

 

delete

from CS_View

where sno = '201215121'

 

select * from CS_View

select * from Student

 

在执行更改操作时,由于IS系不符合CS_View视图的要求,因此更改后自动清除该记录。

删除记录在视图中无法操作,由于视图中不包含相关的记录,但在Student表中含有该条记录,因此转换为对Student表的操作。



猜你喜欢

转载自blog.csdn.net/qq_38499625/article/details/79932049