实验四:SQL Serve中的嵌套查询、数据更新和视图

实验内容与完成情况(记录所有的实验过程):

按照《数据库系统概论》(第五版)P79页的学生课程数据库和P70-71页中的SPJ数据库完成以下查询

  • 嵌套查询中的存在量词

1.查询还没有给任何工程供应过零件的供应商号sno和供应商名称sname,用带EXISTS谓词的子查询或相关联子查询实现。

SELECT SNO 供应商号,SNAME 供应商名称

FROM S

WHERE NOT EXISTS(

SELECT *

FROM SPJ

WHERE SNO=S.SNO

);

运行结果:

2.查询使用了全部零件的工程号JNO,用带EXISTS谓词的子查询实现。

SELECT JNO

FROM J

WHERE NOT EXISTS(

SELECT *

FROM P

WHERE NOT EXISTS(

SELECT *

FROM SPJ

WHERE JNO = J.JNO AND PNO = P.PNO

)

);

运行结果:

3.查询至少选修了’1’号和’2’号课程的学生学号, 用带EXISTS谓词的子查询或自身连接查询实现。

SELECT Sno

FROM Student

WHERE EXISTS (

SELECT *

FROM SC

WHERE Sno = Student.Sno AND Cno =1 AND EXISTS (

SELECT *

FROM SC

WHERE Sno = Student.Sno AND Cno =2

)

);

运行结果:

附加题:查询至少用了供应商S1所供应的所有零件的工程号JNO,用带EXISTS谓词的子查询实现。

SELECT DISTINCT JNO 工程号

FROM SPJ

WHERE EXISTS(

SELECT *

FROM S

WHERE SPJ.SNO=SNO

);

运行结果:

实验四:SQL Serve中的嵌套查询、数据更新和视图_第1张图片

  • 数据更新 

1.P130 (8)把全部蓝色零件的颜色改为红色;

UPDATE P

SET COLOR = '红'

WHERE COLOR = '蓝';

更新前的表格:

实验四:SQL Serve中的嵌套查询、数据更新和视图_第2张图片

更新后的表格:

实验四:SQL Serve中的嵌套查询、数据更新和视图_第3张图片

2.将S5供应给J1的零件P3改为由S1供应,请作必要的修改;

UPDATE SPJ

SET SNO = 'S1'

WHERE SNO = 'S5' AND JNO = 'J1' AND PNO = 'P3';

更新前:

实验四:SQL Serve中的嵌套查询、数据更新和视图_第4张图片

更新后:

实验四:SQL Serve中的嵌套查询、数据更新和视图_第5张图片

3.从供应商关系中删除S3的记录,并从供应情况关系中删除相应的记录。

DELETE

FROM SPJ

WHERE SNO = 'S3'

DELETE

FROM S

WHERE SNO = 'S3';

更新前:

实验四:SQL Serve中的嵌套查询、数据更新和视图_第6张图片实验四:SQL Serve中的嵌套查询、数据更新和视图_第7张图片

更新后:

实验四:SQL Serve中的嵌套查询、数据更新和视图_第8张图片实验四:SQL Serve中的嵌套查询、数据更新和视图_第9张图片

4.删除所有信息系(IS)同学的信息。

DELETE

FROM Student

WHERE Sdept = 'IS';

更新前:

实验四:SQL Serve中的嵌套查询、数据更新和视图_第10张图片

更新后:

实验四:SQL Serve中的嵌套查询、数据更新和视图_第11张图片

自行设计案例对学生-课程数据库的数据更新,并观察是否有违反数据的完整性约束。

--添加信息

INSERT INTO Student(Sno,Sname,Ssex,Sage,Sdept)

VALUES('3171911134','黄湘平','男',21,'CS');

 

INSERT INTO SC(Sno,Cno,Grade)

VALUES('3171911134',4,99);

 

--更新信息

UPDATE SC

SET Grade = 100

WHERE Sno = '3171911134' AND Cno = 4;

 

--删除信息

DELETE

FROM SC

WHERE Sno = '3171911134';

 

DELETE

FROM Student

WHERE Sno = '3171911134';

 

观察结果:没有违反数据的完整性约束!

  • 视图
  1. P130 (9)请为”三建”工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。

CREATE VIEW view_spj AS

SELECT SNO,PNO,QTY

FROM SPJ

WHERE JNO = (

SELECT JNO

FROM J

WHERE JNAME = '三建'

);

针对该视图完成下列查询:

1.找出”三建”工程项目使用的各种零件代码及其数量;

SELECT PNO,QTY

FROM view_spj;

运行结果:

实验四:SQL Serve中的嵌套查询、数据更新和视图_第12张图片

2.找出供应商S2的供应情况;

SELECT *

FROM view_spj

WHERE SNO = 'S2';

运行结果:

创建一个学生成绩统计视图,包括学号,姓名,选课门数,平均分,最高分。(没有选课的学生不参加统计)。

CREATE VIEW view_cal_gradeOfStudent AS

SELECT S.SNO 学号,S.Sname 姓名,COUNT(*) 选课门数, AVG(SC.Grade)平均分,MAX(SC.Grade)最高分

FROM Student S,SC

WHERE S.Sno = SC.Sno

GROUP BY S.Sno,S.sname;

运行结果:

你可能感兴趣的:(实验四:SQL Serve中的嵌套查询、数据更新和视图)