数据库实验报告2

  • 格式:docx
  • 大小:126.31 KB
  • 文档页数:8

《数据库原理》实验报告

题目:实验二

基本表的数据操作 学号 姓名 班级 日期

Xxxxx xx xxxxx

2016.10.16

一. 实验内容、步骤以及结果

1. 在图形用户界面中对表中的数据进行更新。

(1) 按照实验一图2.1-图2.4中所示数据,输入SPJ数据库所含四张表中的数据。

(2) 修改S表的任意一条数据

(3) 删除S表的任意一条数据。

2. 针对SPJ数据库,用SQL语句完成下面的数据更新。

(1) 第五版教材第三章 第5题的8-11小题。

把全部红色零件的颜色改成蓝色。

UPDATE P SET COLOR=’蓝' WHERE COLOR='红'

由S5供给J4的零件P6改为由S3供应。

UPDATE SPJ SET SNO='S3' WHERE SNO='S5' AND JNO='J4' AND PNO='P6'

从供应商关系中删除供应商号是S2的记录,并从供应情况关系中删除相应的记录。

A、 DELETE FROM S WHERE SNO=’S2’

B、 DELETE FROM SPJ WHERE SNO=‘S2

请将(S2,J6,P4,200)插入供应情况关系

INSERT INTO SPJ VALUES(‘S2’,‘J6’,‘P4’,200)

3. 针对SPJ数据库,用SQL语句完成下面的数据查询。

(1) 第五版教材第三章 第4题。(5道小题)

求供应工程 Jl 零件的供应商号码 SNO ;

SELECT DIST SNO FROM SPJ WHERE JNO=’J1’

求供应工程 Jl 零件 Pl 的供应商号码 SNO ;

SELECT DIST SNO FROM SPJ WHERE JNO='J1' AND PNO='P1'

求供应工程 Jl 零件为红色的供应商号码 SNO ;

SELECT SNO FROM SPJ,P WHERE JNO='J1' AND SPJ.PNO=P.PNO AND COLOR='红'

求没有使用天津供应商生产的红色零件的工程号 JNO ;

SELECT DIST JNO FROM SPJ WHERE JNO NOT IN (SELE JNO FROM SPJ,P,S WHERE

S.CITY='天津' AND COLOR='红' AND S.SNO=SPJ.SNO AND P.PNO=SPJ.PNO)。

求至少用了供应商 Sl 所供应的全部零件的工程号 JNO ;

由于VFP不允许子查询嵌套太深,将查询分为两步

A、查询S1供应商供应的零件号

SELECT DIST PNO FROM SPJ WHERE SNO='S1'结果是(P1,P2)

结果为P1,P2

B、查询哪一个工程既使用P1零件又使用P2零件。

SELECT JNO FROM SPJ WHERE PNO='P1'

AND JNO IN (SELECT JNO FROM SPJ WHERE PNO='P2')

最后结果为J4

(2) 第五版教材第三章 第5题的1-7小题。(7道小题)

找出所有供应商的姓名和所在城市。

SELECT SNAME,CITY FROM S

找出所有零件的名称、颜色、重量。 SELECT PNAME,COLOR,WEIGHT FROM P

找出使用供应商S1所供应零件的工程号码。

SELECT DIST JNO FROM SPJ WHERE SNO='S1'

找出工程项目J2使用的各种零件的名称及其数量。

SELECT PNAME,QTY FROM SPJ,P

WHERE P.PNO=SPJ.PNO AND SPJ.JNO='J2'

找出上海厂商供应的所有零件号码。

SELECT PNO FROM SPJ,S WHERE S.SNO=SPJ.SNO AND CITY='上海'

出使用上海产的零件的工程名称。

SELECT JNAME FROM SPJ,S,J

WHERE S.SNO=SPJ.SNO AND S.CITY='上海' AND J.JNO=SPJ.JNO

找出没有使用天津产的零件的工程号码。

注意: SELECT DISP JNO FROM SPJ WHERE JNO NOT IN (SELECT DIST JNO FROM

SPJ,S WHERE S.SNO=SPJ.SNO AND S.CITY='天津') 适用于JNO是唯一或不唯一的情况.

注意: SELECT DIST JNO FROM SPJ,S WHERE S.SNO=SPJ.SNO AND S.CITY<>'天津'适用于JNO是唯一的情况

(3) 查询这样的工程:供给该工程的零件P1的平均供应量大于供给工程J1的任何一种零件的最大供应量。

SELECT JNOFROM SPJWHERE PNO='P1'

GROUP BY JNO

HAVING AVG(QTY)>ANY(SELECT SUM(QTY)FROM SPJWHERE JNO='J1'

GROUP BY PNO)

4. 针对Student数据库用SQL语句完成下面的数据查询。

(1) 查询不选修“C语言”课程的学生学号。

SELECT SC.SnoFROM SCWHERE o IN

(SELECT CnoFROM C WHERE Cname NOT LIKE ‘c语言’);

(2) 查询每个学生已经获得的学分的总分(成绩及格表示获得该门课的学分),并按照所获学分由高到低的顺序输出学号,姓名,所获学分。

SELECT S.sno,SUM(ccredit)

FROM S,C,SC WHERE grade>='60' AND S.sno=SC.sno AND o=o GROUP BY S.sno

ORDER BY SUM(ccredit) DESC

(3) 查询这样的学生姓名:该学生选修了全部课程并且其中一门课在90分以上。

SELECT sname

FROM S,SC

WHERE S.sno=SC.sno AND SC.grade>90 AND sname in(SELECT sname

FROM S

WHERE NOT EXISTS

(SELECT *

FROM C

WHERE NOT EXISTS(SELECT *

FROM SC

WHERE SC.sno=S.sno AND o=o)))

5. 针对Student数据库用至少三种不同的SQL语句进行查询:查询选修了课程名为“数据库原理”的学生学号和姓名,然后自己设计实验,用数据比较分析三种查询的效率。

先限制电脑的性能,让其运行更慢,对于小的数据,执行时间能更久。

declare @begin_date datetime

declare @end_date datetime

select @begin_date = getdate()

/*„„„„查询内容„„„*/

waitfor delay '00:00:01' /*执行时间太短将执行时间延长一秒*/

select @end_date = getdate()

select CONVERT (time, @begin_date) as 'start',

CONVERT (time,@end_date) as 'end',

datediff(ms,@begin_date,@end_date) as 'time/ms'

第一种方法:

SELECT S.sno,sname

FROM S,C,SC

WHERE S.sno=SC.sno AND o=o AND ame LIKE'数据库'

时间是23ms

第二种方法:

SELECT S.sno,sname

FROM S,SC

WHERE S.sno=SC.sno AND o in

(SELECT o

FROM C

WHERE ame LIKE'数据库')

时间是30ms

第三种方法:

SELECT S.sno,sname

FROM S

WHERE S.sno IN

(SELECT SC.sno

FROM SC

WHERE o IN

(SELECT o

FROM C

WHERE ame LIKE'数据库'))

时间是14ms

第一种方法用的是连接,第二种用的是连接加嵌套,第三种方法是嵌套,所以第二种方法最慢,第一种和第二种根据问题的规模,规模较大时,连接会更快。

二. 实验中出现的问题以及解决方案(对于未解决问题请将问题列出来)

除了标题内容以外,该部分内容中还可以写对于实验的一些感受,建议,意见等。

在最后一个问题时,一开始不知道怎么计算程序运行效率,阅读实验指导后找到了最后的执行时间计算方法。在实验中程序的编写有不小难度,不断的尝试修改解决了很多问题。

批阅者:

批阅日期:

实验成绩:

批注: