年整理数据库嵌套查询实验报告[共5篇]

时间:2020-10-28 11:41:26下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《年整理数据库嵌套查询实验报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《年整理数据库嵌套查询实验报告》。

第一篇:年整理数据库嵌套查询实验报告

实验三:数据库的嵌套查询实验

实验目的 :

加深对嵌套查询语句的理解。

实验内容:

使用 IN、比较符、ANY 或 ALL 和 EXISTS 操作符进行嵌套查询操作。

实验步骤:

一.使用带 N IN 谓词的子查询

1.查询与’刘晨’在同一个系学习的学生的信息: 比较 select * from student where sdept in

(select sdept from student where sname=“刘晨”)与: select * from student where sdept =

(select sdept from student where sname=“刘晨”)的异同

比较: select * from student where sdept =

(select sdept from student where sname=“刘晨”)and sname <> ‘刘晨’ 与: select S1.* from student S1, student S2 where S1.sdept=S2.sdept and S2.sname=“刘晨”的异同

2.查询选修了课程名为’信息系统’ 的学生的学号和姓名: 比较 select sno, sname from student where sno in(select sno from sc where cno in

(select cno from course where cname=“信息系统”))与: select sno, sname from student where sno in

(select sno from sc, course where sc.cno=course.cno and cname=“信息系统”)

3.查询选修了课程’1’和课程’2’的学生的学号: select sno from student where sno in(select sno from sc where cno=“1”)and sno in(select sno from sc where cno=“2”)

比较: 查询选修了课程’1’或课程’2’的学生的 sno: select sno from sc where cno=“1” or cno=“2”

比较连接查询:

select A.sno from sc A, sc B where A.sno=B.sno and A.cno=“1” and B.cno=“2”

二.使用带比较运算的子查询 4.查询比’刘晨’年龄小的所有学生的信息: select * from student where sage<

(select sage from student where sname=“刘晨”)

三.使用带 Any, All 谓词的子查询 5.查询其他系中比信息系(IS)某一学生年龄小的学生姓名和年龄;select sname, sage from student where sage

(select sage from student where sdept=“IS”)and sdept<>“IS”

6.查询其他系中比信息系(IS)学生年龄都小的学生姓名和年龄: select sname, sage from student where sage “IS”

7.查询与计算机系(CS)系所有学生的年龄均不同的学生学号, 姓名和年龄: select sno,sname,sage from student where sage<>all(select sage from student where sdept=“CS”)

四.使用带 s Exists 谓词的子查询和相关子查询

8.查询与其他所有学生年龄均不同的学生学号, 姓名和年龄: select sno,sname,sage from student A where not exists(select * from student B where A.sage=B.sage and A.sno<>B.sno)

9.查询所有选修了 1 号课程的学生姓名: select sname from student where exists(select * from sc where sno=student.sno and cno=“1”)

10.查询没有选修了 1 号课程的学生姓名: select sname from student where not exists(select * from sc where sno=student.sno and cno=“1”)

11.查询选修了全部课程的学生姓名: SQL Server 中:

select sname from student where not exists(select * from course where not exists(select * from sc where sno=student.sno and cno=course.cno))

11.查询至少选修了学生 95002 选修的全部课程的学生的学号: SQL Server 中: select distinct sno from sc A where not exists

(select * from sc B where sno=“95002”and not exists(select * from sc C where sno=A.sno and cno=B.cno))

12.求没有人选修的课程号 cno 和 cnamecname: select cno,cname from course C where not exists(select * from sc where sc.cno=C.cno)

13*.查询满足条件的(sno,cno)对, 其中该学号的学生没有选修该课程号 cno的课程 SQL Server 中: select sno,cno from student,course where not exists(select * from sc where cno=course.cno and sno=student.sno)

14*.查询每个学生的课程成绩最高的成绩信息(sno,cno,grade): select * from sc A where grade=(select max(grade)from sc where sno=A.sno)

思考: 如何查询所有学生都选修了的课程的课程号 cno? select cno

from sc

group by cno

having count(*)=(select count(*)from student)

第二篇:实验5 数据库的嵌套查询实验

实验五

数据库的嵌套查询实验

1、实验目的

本实验的目的是使学生进一步掌握SQL Server查询分析器的使用方法,加深SQL语言的嵌套查询语句的理解

2、实验时数

2学时

3、实验内容

本实验的主要内容是:在SQL Server查询分析器中使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。

具体完成以下例题。将它们用SQL语句表示,在学生数据库中实现其数据嵌套查询操作。

1、查询选修了高等数学的学生学号和姓名 select Sno,Sname from Student where Sno in(select Sno from SC,Course where SC.Cno=Course.Cno and Cname='数学')

2、查询1号课程的成绩高于刘晨的1号课程成绩的学生学号和成绩 select SC.Sno,Grade from SC,Student where Cno='1' and SC.Sno=Student.Sno and Grade>all(select Grade from SC,Student where SC.Sno=Student.Sno and Sname='刘晨')

3、查询其他系中比cs系某一学生年龄小的学生(即年龄小于计算机系年龄最大者的学生)select * from Student where Sdept!='cs' and Sage

4、查询其他系中比cs系所有学生年龄都小的学生 select * from Student where Sdept!='cs' and Sage

5、查询选修了2号课程的学生姓名 select Sname from Student where Sno in(select Student.Sno from SC,Student where SC.Sno=Student.Sno and Cno='2')

6、查询没有选修2号课程的学生姓名 elect Sname from Student where exists(select SC.Sno from SC,Student where Cno!='2' group by SC.Sno)

7、查询选修了全部课程的学生姓名 Select * from SC where Cno=all(select Cno from Course)

8、求至少选修了学号为“00215122”的学生所选修全部课程的学生学号和姓名 select Sno,Sname from Student where Sno in(select Student.Sno from Student,SC where Student.Sno=SC.Sno and Cno=any(select Cno from SC where Sno='00215122'))

4、实验方法

将查询需求用SQL语言表示:在SQL Server查询分析器的输入区中输入SQL查询语句:设置查询分析器的结果区为Standard Execute(标准执行)或Execute to Grid(网格执行)方式;发布执行命令,并在结果区中查看查询结果;如果结果不正确,要进行修改,直到正确为止。

5、实验心得体会

本次实验还是进行查询操作,只是在第四次试验的基础上加入了嵌套,嵌套查询是在我们以后进行软件开发涉及数据库常用的查询操作,通过实验有助于我们对嵌套查询的理解,对我们熟练的使用SQL查询语句进行查询操作有很大帮助。

第三篇:Access数据库应用技术实验报告查询(精选)

数据库应用技术实验报告

查询

名: 学

号: 班

级: 指导教师:

****年**月**日1 实验目的

掌握选择查询、参数查询、交叉表查询、操作查询、SQL查询的创建。实验总体要求

根据题目选择合适的方法创建查询,可以使用查询向导、查询设计视图和SQL命令。实验步骤可以粘贴查询设计视图截图,也可粘贴SQL命令。实验内容

1、创建查询CX1,查找有超期图书的读者的借书证号、姓名、图书编号、图书名称,借阅日期,超期天数(以当前时间为准,借书时间超过90天为超期)。

2、创建查询CX2,统计每个出版社出版的图书的数量、图书的平均定价。

3、创建查询CX3,查找定价低于图书平均定价的图书的图书编号、图书名称、作者、出版社、定价。

4、创建更新查询CX4,将“图书书目表”的“是否借出”字段根据“借阅登记表”中读者的借阅情况填入正确的值。

5、创建生成表查询CX5,查找从未有读者借阅的图书的图书编号、图书名称、作者、出版社,生成的表名为“未借出过图书”。

6、为“借书证表”增加一字段,字段名为性别、文本型、字段大小为1。创建查询CX6,根据身份证号的第17位输入性别字段的值。(第17位偶数是女,奇数为男)

7、创建交叉表查询CX7,根据输入的出版社参数值,显示该出版社每种类别的图书的数量。(出版社为行标题,类别号为列标题)

8、创建查询CX8,查找借出次数最多的图书的编号、图书名称、作者、出版社。

9、创建查询CX9,将借出次数最多的图书的编号、图书名称、作者、出版社追加到“未借出过图书”表中。实验步骤

1、CX1的SQL命令为:

SELECT 借书证表.借书证号, 借书证表.姓名, 图书书目表.图书编号, 图书书目表.图书名称, 借阅登记表.借阅日期, Date()-[借阅日期] AS 超期天数

FROM 图书书目表 INNER JOIN(借书证表 INNER JOIN 借阅登记表 ON 借书证表.借书证号 = 借阅登记表.借书证号)ON 图书书目表.图书编号 = 借阅登记表.图书编号

WHERE(((Date()-[借阅日期])>90)AND((借阅登记表.归还日期)Is Null));

CX1的查询结果为:

2、CX2的设计视图为:

CX2的查询结果为: SQL:SELECT 图书书目表.出版社,count(图书书目表.出版社)as 数量,avg(图书书目表.定价)as平均定………………………….roup by 图书书目表.出版社;

3、CX3的SQL命令为:

CX3的查询结果为:

4、CX4的SQL命令为:

UPDATE 图书书目表 SET 是否借出 = 1 WHERE………………………….图书书目表.图书编号=借阅登记表.图书编号 and 借阅登记表.归还日期 is null);CX4的查询结果为:

5、CX5的SQL命令为:

SELECT 图书编号, 图书名称, 作者, 出版社 INTO 未借出过图书

………………………….from 借阅登记表 where 图书书目表.图书编号=借阅登记表.图书编号);CX5的查询结果为:

6、CX6的SQL命令为:

UPDATE 借书证表 SET 性别 = Mid(身份证号,17,1);CX6的查询结果为:

7、CX7的SQL命令为:

TRANSFORM Count(图书书目表.图书编号)AS 图书编号之计数 SELECT ………………………….目表.图书编号)AS [总计 图书编号] FROM 图书书目表

GROUP BY 图书书目表.出版社

PIVOT 图书书目表.类别号;CX7的查询结果为:

8、CX8的SQL命令为:

SELECT 图书编号, 图书名称, 作者, 出版社 FROM 图书书目表 WHERE 图书编号=(SELECT TOP 1 图书编号

………………………….ORDER BY Count(图书编号)DESC);CX8的查询结果为:

9、CX9的SQL命令为:

INSERT INTO 未借出过图书(图书编号, 图书名称, 作者, 出版社)SELECT 图书编号, 图书名称, 作者, 出版社 ………………………….SELECT TOP 1 图书编号 FROM 借阅登记表

GROUP BY 借阅登记表.图书编号 ORDER BY Count(图书编号)DESC 5);CX9的查询结果为:

5评语和得分

第四篇:数据库实验报告

实验一 PowerDesigner 的 CDM 应用

1:实验目的

使用PowerDesinger进行数据库概念模型设计,掌握CDM中的实体、实体属性、实体与实体之间联系的操作方法。2:实验内容

建立一个“实验一练习”命名的Conceptual Data Model(CDM)文件,其中应包括的实体、实体的属性及实体之间的联系。3:实验结果

4.实验心得

初次接触数据库原理实验,相对来说还是比较陌生,但老师讲解还相对比较清楚,并且实验报告写的十分清楚,只是遇到多建立了一个实体而无法删除的问题,通过同学的帮助也解决了,相对来说第一次实验还是比较顺利的。

实验二 PowerDesigner 的 PDM 应用

1.实验目的

用PowerDesinger的工具将CDM生成PDM过程,熟悉PDM工作区,为生成数据库中的物理的表打下基础。完成这个实验后,应该能够了解从CDM到PDM的转换过程,熟悉PowerDesinger的PDM工作区,使用工具选项板进行PDM对象设计。

2.实验内容

从CDM生成PDM,设计结束后,利用PowerDesigner的“生成数据库”功能,产生数据库中各数据对象的定义,再运行MySQL的命令行客户端软件,打开test数据库,运行crebas.sql,同时进行中英文的转换,最后运行show tables命令查看表。

3.实验结果

4.实验心得

经过本次实验,学会了用PowerDesinger的工具将CDM生成PDM过程,并且利用crebas.sql进行中英文的转换,最后利用show tables命令查看表,受益匪浅。

实验 三Navicat for MySQL的使用和SQL语言数据定义语言DDL 1.实验目的

了解Navicat for MySQL的启动,熟悉如何在Navicat for MySQL下配置数据库联接。了解DDL语言的CREATE、DROP、ALTER对表、索引、视图的操作,学会在Navicat for MySQL中用DDL语言进行对表、索引、视图的增加、删除和改动 2.实验内容

1.启动Navicat for MySQL。

2.在MySQL–新建连接中完成连接参数配置,并完成连接测试和保存连接参数。3.查看mysql数据库的help_category表的定义、表中数据与索引、完整性约束等。4.查看mysql数据库的其它数据库对象,如视图、索引、存储过程、函数、触发器。5.在Navicat for MySQL中打开查询,新建查询,运行简单的SQL语句,如select * from help_keyword where help_keyword_id<=3;观察下结果。3.实验结果

4.实验心得

使用navicat for MySQL连接数据库的时候,不能正常连接到数据库,出现“access denied for user’root@’localhost”的错误提示,经过查找发现是MySQL没有正确安装,重装之后就可以正常的访问数据库,在本次实验中也学会了Navicat for MySQL的基础的查询使用以及简单的SQL语句的运行。

实验 四 SQL语言数据定义语言DDL 1:实验目的

本次实验了解SQL语言中DDL语言的CREATE、DROP、ALTER对表、索引、视图的操作,掌握在Navicat for MySQL中用DDL语言进行对表、索引、视图的增加、删除和改动。掌握使用SQL语句增加或删除约束,加深对完整性概念的理解,达到灵活应用的目的。掌握使用SQL语句定义和删除同义词。2:实验原理

在 Navicat for MySQL 中使用 CREATE 命令完成对表、索引、视图、同义词 的创建,使用 DROP 命令完成对表、索引、视图、同义词的删除,使用 ALTER 命 令对表结构进行修改及完整性约束的增加、删除。

3:实验代码及结果 相应SQL语句为:

CREATE TABLE NewTable(studentid varchar(10)NOT NULL , name varchar(20)NOT NULL , sex varchar(2)NOT NULL , age integer NOT NULL , Fee decimal(10,2)NULL , address varchar(50)NULL , memo varchar(300)NULL , PRIMARY KEY(studentid));

截图如下:

3.用Create Table语句建表CourseAa,相应的SQL语句为: CREATE TABLE CourseAa(Aa1 Varchar(20), Aa2 INTEGER, Aa3 decimal(10)); 截图如下:

5.用Create Table语句建表ChooseBb 相应的SQL语句如下: CREATE TABLE ChooseBb(Bb1 VARCHAR(30), Bb2 INTEGER, Bb3 DECIMAL(6));

6.用Drop Table语句删除表CourseAa,相应的SQL语句如下: Drop table CourdeAa;

7.用Alter Table语句更新表ChooseBb,添加一个属性名Bb4,类型Varchar,长度20,完整性约束设为非空值,缺省值设为字符“系统测试值”,相应的SQL语句如下: ALTER TABLE choosebb ADD Bb4 VARCHAR(30)NOT NULL;

8.用Alter Table语句更新表ChooseBb,添加一个属性名Bb5,类型Varchar, 长度10,完整性约束设为主码。完成后,表ChooseBb的设计如下所示。相应的SQL语句如下:

ALTER TABLE choosebb ADD Bb5 VARCHAR(30)PRIMARY KEY;

9.用Create View语句建立一个视图View_Choosebb,生成的视图属性名(View_bb1,View_bb2,view_bb3), 其中View_bb1对应于基表ChooseBb的Bb1、View_bb2对应于基表ChooseBb的Bb4、view_bb3对应于基表ChooseBb的Bb5。完成后,视图View_Choosebb的设计如下所示。

相应的SQL语句如下:

CREATE VIEW View_Choosebb AS SELECT Bb4 AS View_bb1,View_bb2 FROM chooseBb;CREATE VIEW View_Choosebb AS SELECT Bb5 AS View_bb3 FROM chooseBb;10.用Drop View语句删除视图View_Choosebb。相应的SQL语句如下: DROP VIEW View_choosebb;11.用Create Index语句对表ChooseBb的Bb2属性建立一个升序索引,索引名Index_bb2。用Create Index语句对表ChooseBb的Bb4属性建立一个降序索引,索引名Index_bb4。相应的SQL语句如下:

CREATE INDEX Index_bb2 ON ChooseBb(Bb4 DESC);12.用Drop Index语句删除索引Index_bb2。相应的SQL语句如下:

DROP INDEX Index_bb2 ON ChooseBb;

4:实验中遇到的问题及心得体会

1、用Drop Table语句删除表CourseAa的时候,在SQL浏览框中输入语句并运行,发现左边项目栏中还是有CourseAa表的存在,但是确打不开CourseAa表,弄了很长时间,也不知道是什么情况,最后尝试刷新页面之后,发现语句运行正确,CourseAa表成功删除。

2、由于理论课时查询语言之学到了表的查询,到后面实验中涉及视图的建立及查询,也不清楚是怎么回事,而且由于对查询语句的不熟悉,实验过程中进行缓慢,视图的部分是课下看书慢慢写的,没有截图。

通过这次实验,初步了解了SQL语言中DDL语言的CREATE、DROP、ALTER对表、索引、视图的操作,掌握在Navicat for MySQL中用DDL语言进行对表、索引、视图的增加、删除和改动。掌握使用SQL语句增加或删除约束。因为实验过程中对这些语句的不熟悉耽误课很长时间,还需课下多下工夫多看、多写。

实验五

SQL语言数据操纵语言DML

1:实验目的

SQL 语言的数据操纵功能通过 DML(数据维护语言)实现。DML 包括数据查询 和数据更新两种数据操纵语句。其中,数据查询指对数据库中的数据查询、统计、分组、排序等操作;数据更新指数据的插入、更新和删除等数据维护操作。

本次实验了解 DML 语言的 INSERT、UPDATE、DELETE 等数据维护语言,掌握 在 Navicat for MySQL 中用 DML 语言的 INSERT、UPDATE、DELETE 对表进行数据 插入、更新和删除。

2实验内容

在 Navicat for MySQL 中使用 INSERT 语句向表中插入数据。使用 UPDATE 语句更新(修改)表中已有数据。使用 DELETE 语句删除表中数据。

3:实验代码及结果

1、用Create Table语句建立test表,其语句和截图如下所示; CREATE TABLE `NewTable`(`Name` varchar(20)NOT NULL , `Age` integer NULL , `Score` numeric(10,2)NOT NULL , `Address` varchar(60)NULL);

2、继续用Create Table语句建立test_temp表,其语句同1。

3、用INSERT语句对表test_temp,插入如实验报告中的三条记录,其插入语句和截图如下: INSERT INTO test_temp

VALUES('郑七',21,'490.50','重邮宿舍11-2-1');INSERT INTO test_temp

VALUES('张八',20,'560.00','南福苑3-3-3');INSERT INTO test_temp

VALUES('王九',10,'515.00','学生新区19-7-1');

4、用INSERT INTO…SELECT…FROM语句,将test_temp表中的数据,插入到test中,其语句及其截图如下: INSERT INTO test

SELECT * FROM test_temp;

5、用UPDATE语句将test表中年龄小于20的数据,将其成绩更新为原来的成绩加5分,其语句和截图如下:

UPDATE test SET Score=Score+5 WHERE Age<=20;

6用UPDATE语句将test表中居住在南福苑所有的学生年龄减少1岁,其语句和截图如下:、UPDATE test SET Age=Age-1 WHERE Address Like '南福苑%';

7、用DELETE语句将test表中年龄大于等于21 并且成绩大于等于500的学生数据删除,其语句和截图如下: DELETE FROM test

WHERE Score<=500 AND Age>=21;

8、用DELETE语句将test表中成绩小于550并且居住在重邮宿舍的学生数据删除,其语句和截图如下:

DELETE FROM test WHERE Score<=550 AND Address LIke'重邮宿舍%';

4实验心得

这次实验从实验原理还是实验操作来说还是相对简单的,但越是对简单的是就越容易犯迷糊,这次件表命名给了我很多启示,以后对细节还是要十分注意的。

实验六 SQL语言数据查询语言DQL

1:实验目的

本次实验了解 SQL 语言的 SELECT 语句对数据的查询,学会在 Navicat for MySQL 中用 SELECT 语句对表中的数据进行简单查询、连接查询、嵌套查询和组 合查询。2:实验原理

在 Navicat for MySQL 中使用 SELECT 语句从表中查询数据、统计数据及对 数据进行分组和排序等操作。3:实验代码及结果

1.用 Create Table 建立 Student 表:

2.用 Create Table 建立 Course 表:

3.用 Create Table 建立 Choose 表:

4.用 INSERT 语句向 Student 表中插入 3 个元组:

5.用 INSERT 语句向 Course 表中插入 3 个元组:

6.用 INSERT 语句向 Choose 表中插入 7 个元组:

7.用 SELECT 语句,查询计算机学院学生的学号和姓名。

8.用 SELECT 语句的 between„and„表示查询条件,查询年龄在 20~23 岁的学 生信息。

9.用 SELECT 语句的 COUNT()聚集函数,统计 Student 表中学生总人数。

10.分别用 SELECT 语句的 max()、min()、sum()、avg()四个聚集函数,计算 Choose 表中 C1 课程的最高分、最低分、总分、平均分。max():

Min():

Sum();

avg():

11.用 SELECT 语句对空值(NULL)的判断条件,查询 Course 表中先修课称编号为 空值的课程编号和课程名称。

12.用 SELECT 语句的连接查询,查询学生的学号、姓名、选修的课程名及成绩。

13.用 SELECT 的存在量词 EXISTS,查询与“张三”在同一个学院学习的学生信 息。

14.用 SELECT 语句的嵌套查询,查询选修 C1 课程的成绩低于“张三”的学生的 学号和成绩。

15.用 SELECT 语句的组合查询(UNION),查询选修了 C1 课程或者选修了 C3 课程 的学生学号。

16.用 SELECT 语句的组合查询(UNION)与 DISTINCT 短语,查询选修了 C1 课程或 者选修了 C3 课程的学生学号,并取消重复的数据。

4.实验心得

本次实验室相对于前几次来说比较困难的一次,因为语句刚学过,下去也没有及时去练习,对于很多还是比较困难,在本次实验中通过练习,让我了解 SQL 语言的 SELECT 语句对数据的查询,学会在 Navicat forMySQL 中用 SELECT 语句对表中的数据进行简单查询、连接查询、嵌套查询和组合查询。课下时间也会多多练习SQl语句。

实验七

MYSQL应用开发环境的建立

1:实验目的

通过在Windows平台下,搭建Apache Httpd Web服务器,PHP脚本支持,访问MySQL数据库等,学习了解MySQL应用开发环境的建立过程。本次实验通过安装Apache HTTD Server 2.2、PHP 5.3.28,配置httpd.conf和PHP.ini文件,完成MySQL的PHP应用开发环境的建立。2:实验内容

1、按照实验指导安装Apache http Server。成功后,截图如下:

2、配置Apache服务器支持PHP文件解析,截图如下:

3、实验测试成功,截图如下:

3:遇到的问题及解决 配置PHP扩展支持MySQL数据库。用记事本打开php5.3.28之下的php.ini文件,把;extension=php_mysql.dll去掉。只是去掉了extension=php_mysql.dll,而,而没有其前面的分号去掉就保存了文件。

4:实验心得

通过在 Windows平台下,搭建 Apache Httpd Web 服务器,PHP 脚本支持,访问 MySQL 数据库等,我学习了解 了MySQL 应用开发环境的建立过程。学会了安装 Apache HTTD Server 2.2、PHP 5.3.28,配置 httpd.conf和 PHP.ini 文件,完成 MySQL 的 PHP 应用开发环境的建立。

实验八 MySQL的存储过程

1:实验目的

存储过程分为两类:1.系统提供的存储过程;2.用户自定义存储过程。

存储过程具有的优点:1.存储过程允许标准组件式编程;2.存储过程能够实 现较快的执行速度;3.存储过程能够减少网络流量;4.存储过程可被作为一种安 全机制来充分利用。存储过程是可复用的组件!想象一下如果你改变了主机的语 言,这对存储过程不会产生影响,因为它是数据库逻辑而不是应用程序。存储过 程是可以移植的!

本次实验了解 MySQL 存储过程的创建、修改和删除的方法和步骤,掌握在 Navicat for MySQL中对存储过程的进行创建、修改和删除,掌握在MySQL Command Line Client 中调用带参数和不带参数的存储过程。

2:实验内容

1、MySQL Command Line Client中创建存储过程,按照实验指导书创建第一、第二个存储过程及其调用。

2、调用第三、第四个传出参数的存储过程:

3、创建存储过程third_p(),显示表cqupt中的数据,并对其进行调用测试。

4、创建存储过程simpleproc2(),对传入参数进行乘以10的处理,变量定义@x,并对其进行调用测试。5.用Drop Procedure语句删除存储过程first_p。

3:实验结果

4:心得体会

通过此次实验,学会了在MySQL Command Line Client中创建存储过程及其调用,并传递参数对其进行调用测试.实验九MySQL的触发器和SQL语言数据控制语言DCL 1:实验目的

触发器是特定事件出现的时候,自动执行的代码块,类似于存储过程。触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的,由DBMS自动执行。触发器具有这些功能:

1、允许/限制对表的修改;

2、自动生成派生列,比如自增字段;

3、强制数据一致性;

4、提供审计和日志记录;

5、防止无效的事务处理;

6、启用复杂的业务逻辑。

本次实验了解MySQL触发器的创建、修改和删除的方法和步骤,掌握在Navicat for MySQL中对触发器的进行创建、修改和删除,掌握触发器触发测试的方法。2:实验内容

1、创建触发器audit_student,该触发器对修改student表的时间、用户名记录到日志表中。

2.执行

五、教学过程中

(三)实验内容的第二部分改造简单触发器,增加触发类型判断功能,验证触发器的改造和改造后的触发器触发测试。3.自行编写student表的触发器aduit_student_update,在对student表进行更新操作前触发,触发时,向student_log表写入触发用户、触发时间和触发类型。并对该新建进行触发测试。

4.自行编写student表的触发器aduit_student_delete,在对student表进行删除操作后触发,触发时,向student_log表写入触发用户、触发时间和触发类型。并对该新建进行触发测试。

3:实验结果

①输入如下语句,建立实验表student,如图所示: create table student(SNO varchar(10),SNAME varchar(30),Sage Int);

②输入如下语句,建立日志表student_log,并查看日志表是否为空,如图所示:

create table student_log(who varchar(30),whattimeTIMESTAMP);

select * from student_log;

③输入如下语句,在student表上语句触发器,如图所示: use test;

Create trigger audit_student Beforeinsert On student For each row Begin Insert into student_log(Who,whattime)Values(current_user,current_timestamp);End;

建立④输入如下语句对触发器进行INSERT触发测试,如图所示: 对student表做一个INSERT操作:

Insert into student values('1992150033','吴思远',40);

输入如下语句查看表student_log,检查触发器工作结果,表student_log中数据如图所示:

select * from student_log;

①输入如下语句,修改日志表结构,增加一个属性存放触发语句类型。如图所示: alter table student_log add(action varchar(20));

②修改触发器,记录触发语句类型。选中student表,单击右键,选择设计表,点击触发器选项卡,在定义中对INSERT进行编辑,如图所示:

select * from student_log

4:实验心得

本次实验让我了解 MySQL 触发器的创建、修改和删除的方法和步骤,掌握在

Navicat for MySQL 中对触发器进行创建、修改和删除的步骤,掌握了触发器触发测试的方法。

实验十SQL的数据控制通过DCL(数据控制语言)实现

1:实验目的

DCL 通过对数据库用户的授 权和权限回收命令来实现有关数据的存取控制,以保证数据库的安全性

本次实验了解 DCL 语言的 GRANT 和 REVOKE 语句对数据库存取权限的控制,学会在Navicat for MySQL中用GRANT、REVOKE语句对数据库存取权限进行设定。

2:实验内容

1.登录mysql,创建用户jason,密码为abc123,并授权该用户完整访问数据库test。即执行如下DCL语句:GRANT ALL ON test.* TO jason@“%”IDENTIFIED BY “abc123”;2.启动另外一个Navicat for MySQL,在MySQL –新建连接中完成jason连接参数配置

3.对user表进行授予权限操作,并用select insert 进行测试 4.对user表进行收回权限操作,用select insert语句进行测试 3:实验结果

GRANT ALL ON test.* TO jason@“%” IDENTIFIED BY “abc123”;GRANT SELECT on mysql.host to jason;

2、将数据库 mysql 中表 host 的查询权限从用户 jason 回收

3.创建用户jason,密码为abc123,并授权该用户完整访问数据库test。GRANT ALL ON test.* TO jason@“%” IDENTIFIED BY “abc123”;

4.启动另外一个Navicat for MySQL,在MySQL –新建连接中完成jason连接参数配置。为了能查询到相应的数据,我们必须进行授权操作。语句如下: Grant select on mysql.user to jason;

授权后,现在切换到Navicat for MySQL,执行之前窗口中的查询语句:

5、接下来,切换到MySQL的命令行客户端,创建一个简单的表,切换到Navicat for MySQL,新建一个查询:

insert into mysql.dcltest(id,name)values(1,'张三丰');

6、切换到MySQL的命令行客户端,执行如下授权语句,进行INSERT权限的授予: Grant insert on mysql.user to jason;

输入如下查询语句:

Select * from mysql.dcltest;

权限授予后,root(数据库超级用户)可以进行权限的回收。

7、切换到Navicat for MySQL,新建一个查询,执行如下插入语句: insert into mysql.dcltest(id,name)values(2,'扫地僧');执行如下权限回收语句:

Revoke insert on mysql.dcltest from jason;

新建一个查询,执行如下查询语句: select * from mysql.dcltest;

Revoke select on mysql.dcltest from jason;

4:实验心得

通过本次实验,我了解DCL语言的GRANT和REVOKE语句对数据库存取权限的控制,学会在Navicat for MySQL中用GRANT、REVOKE语句对数据库存取权限进行设定。

实验十一MySQL的事务与锁

1:实验目的

事务(Transaction)是MySQL数据库系统中的一个逻辑工作单元,是完成一组数据库操作的程序执行单元;锁(Lock)是MySQL数据库系统中并发控制的常用方法.本次实验了解MySQL事务的设置、提交和回退的方法和步骤,掌握MySQL Command Line Client中如何进行相关操作。了解MySQL的表锁定与锁定解除,掌握MySQL Command Line Client中如何进行相关操作。2:实验内容

启动MySQL的命令行客户端,输入密码mysql(小写);执行

五、教学过程中

(三)实验内容的1部分,学习和验证MySQL的事务;在实验步骤2的基础上,在数据bankrecord的表record中,添加一个元组id为3的张六,初始余额2万;自己写事务完成如下操作:李四向张六转账5千,然后取消该转账;王五向李四转账1万5,然后确认转账;执行

五、教学过程中

(三)实验内容的2部分,学习和验证MySQL的锁;在步骤4的基础上,在数据库bookrecord的表sellrecord中,添加一个元组id为2000的书籍Oracle数据库实用教程库,存为2本;在当前MySQL命令行客户端里面模拟李四购书,另外启动一个MySQL命令行客户端,模拟王五购书;要求使用写锁先锁定后,再修改,因为库存有两本,所以李四和王五都能买到,库存为0,并且两人的名字都出现在buyername 3:实验结果

create database bankrecord character set utf8 collate utf8_general_ci;use bankrecord;

create table record(id int,name varchar(20),jine decimal(8,2));

set names gbk;

insert into record values(1, '李四',20000);insert into record values(2, '王五',20000);start transaction;

update record set jine=jine-10000 where name='李四';select * from record;rollback;

select * from record;

1、查看数据库自动提交模式是否打开:

2,按照实验指导先建立数据库、表和向表中插入初始账户记录:

3、完成开始事务,从李四账户转出 1 万元,向王五账户中转入 1 万元,提交确认转账:

4、安实验指导执行语句先建立数据库、表和向表中插入初始书籍记录:

5、在数据库 bankrecord 的表 record 中,添加一个元组id 为 3 的张六,初始余额 2 万,李四向张六转账 5 千,然后取消该转账;王五向李四转账 1 万 5,然后确认转账(语句在图中显示):

6、在数据库 bookrecord 的表 sellrecord 中,添加一个元组id 为 2000 的书籍 Oracle 数据库实用教程库,存为 2 本(相关语句在图中显示):

7、在当前 MySQL 命令行客户端里面模拟李四购书,另外启动一个 MySQL 命令行客户 端,模拟王五购书(语句在图中显示)。

4:实验心得

本次实验了解 MySQL 事务的设置、提交和回退的方法和步骤,掌握 MySQL Command Line Client 中如何进行相关操作。了解 MySQL 的表锁定与锁定解除,掌握 MySQL Command Line Client 中如何进行相关操作。

实验十二MySQL的常用函数MySQL 1:实验目的

本次实验了解 MySQL 常用字符串、日期和时间函数等的使用,掌握 MySQL Command Line Client 中如何进行相关操作。常用函数包括常用字符串、日期和时间函数等各类函数。2:实验内容

启动 MySQL 的命令行客户端,输入密码 mysql(小写);执行

五、教学过程中

(三)实验内容的 1 部分,学习和验证 MySQL 的字符串函数;在实验步骤 2 的基础上,学习如下两个函数并完成题目:定位和位置函数 LOCATE(substr,str),返回字符串 str 中子字符串 substr 的第一次出现位置,如果 str 中不包含 substr,返回 0。

请使用LOCATE函数计算needle在haystackneedlehaystack第一次出现的位置;子字符串函数 SUBSTRING(str,pos,len),从字符串 str 返回一个长度同 len 字符相同的子字符串,起始于位置 pos;请使用 SUBSTRING 函数计算 backspace,从第 2 个字符起,长度为 5 的子字符串;字符串函数的解答脚本和结果请保存,老师会检查;执行

五、教学过程中

(三)实验内容的 2 部分,学习和验证 MySQL 的日期和时间函数;在步骤 4 的基础上,学习如下一个函数并完成题目:周函数 WEEK(date),返回 date 时间包含的星期数;请使用 WEEK 函数计算当前日期包含的星期数。3:实验结果

4:实验心得

通过本次实验掌握了MySQL 常用函数包括常用字符串、日期和时间函数等各类函数,并且学会了MySQL Command Line Client 中如何进行相关操作。

第五篇:数据库实验报告

实验7 索引和数据完整性的使用

1、目的与要求

(1)掌握索引的使用方法;

(2)掌握数据完整性的实现方法;

2、实验准备

(1)了解索引的作用与分类;(2)掌握索引的创建方法;

(3)理解数据的完整性的概念与分类;(4)掌握各种数据完整性的实现方法。

3、实验内容

(1)建立索引

①使用CREATE INDEX语句创建索引。

对YGGL数据库的Employees表中的DepartmentID列建立索引。在查询分析器中输入如下程序并执行: USE YGGL GO CREATE INDEX depart_ind

ON Employees(DepartmentID)GO 在Employees表的Name列和Address列上建立复合索引。CREATE INDEX Ad_ind

ON Employees(Name,Address)对Departments表上的DepartmentName列建立唯一非聚集索引。CREATE UNIQUE INEDX Dep_ind ON Departments(DepartmentName)【思考与练习】

a.索引创建完后在对象资源管理器中查看表中的索引。b.了解索引的分类情况

c.使用CREATE INDEX语句能创建主题吗? d.在什么情况下可以看到建立索引的好处?

②使用界面方式创建索引。

使用界面方式在Employees表的PhoneNumber列上创建索引。

启动SQL Server Management Studio,在对象资源管理器中展开数据库YGGL,展开表Employees,右击“索引,选择“新建索引”选项。在新建索引的窗口中填写索引的名称和类型,单击“添加”按钮,在列表框中选择要创建的索引的列,选择完单击“确定”按钮即完成创建工作。【思考与练习】

a.使用界面方式创建一个复合索引。

b.在Employees表的表设计窗口选择Address列,右击选择“索引/键”菜单项,在新窗口中的Address列创建一个唯一的索引。

c.创建一个数据量很大的新表,查看使用索引和不使用索引的区别。

(2)重建索引。

重建表Employees中的所有索引。USE YGGL GO ALTER INDEX ALL

ON Employ REBUILD 【思考与练习】重建表Employees中EmployeeID列上的索引。

(3)删除索引。

使用DROP INDEX语句删除表Employees上的索引Depart_ind,计划使用如下SQL语句:

DROP INDEX Depart_ind ON Employees 【思考与练习】

a.使用QROP INDEX一次删除Employees表上的多个索引 b使用界面方式删除Department表上的索引。

(4)数据完整性。

①创建一个表Employees5,只含EmployeesID,Name,Sex和Education列。将Name,设为主键,作为列Name的约束。对EmployeesID列进行UNIQUE约束,并作为表的约束。

CREATE TABLE Employees5(EmployeesID char(6)NOT NULL PRIMARY KEY, Sex tinyint Education char(4), CONSTRAINT UK_id UNIQUE(EmployeesID))

②删除上例中创建的UNIQUE约束。ALTER TABLE Employees5 DROPCONSTRAINT UK_id GO 【思考与练习】

a.使用T-SQL命令创建一个新表,使用一个复合列作为主键,作为表的约束,并为其命名。b.使用语句为表ALTER TABLEEmployees5添加一个新列Address,并为该列定义UNIQUE约束,并了解如何使用图形向导方式删除主键和UNIOQUE约束。

③创建新表student,只考虑“号码”和“性别”两列,性别只能包含男或女。CREATE TABLE student(号码char(6)NOT NULL 性别char(2)Employees

CHECK(性别 IN(“男”,“女”))

【思考与练习】 向该表插入数据,“性别”列插入“男”和“女”以外的字符,查看会发生什么情况。

④创建新表Salary2,结构与Salary相同,但Salary2表不可以OutCome列大于Income列。

CREATE TABLE Salary2(EmployeesID char(6)NOT NULL Income Float NOT NULL, OUTCOME FLOAT NOT NULL, CHECK(INCOME>=OUTCOME))【思考与练习】

a.向表中插入数据,查看OUTCOME值比INCOME值大是会有什么情况。b.创建一个表Employees6,只考虑“学号”和“出生日期”两列,出生日期必须晚于1980年1月1日。

⑤对YGGL数据库中的Employees表进行修改,为其增加“DepartmentID”字段的CHECK约束。

use YGGL go alter table Employees add constraint depart check(DepartmentID>=1 and DepartmentID<=5)【思考与练习】测试CHECK约束的有效性。

⑥创建一个规则对象,用以限制输入到该规则所绑定的列中的值只能是该规则中列出的值。

create rule list_rule as @list in('财务部','研发部','人力资源部','销售部')go exec sp_bindrule 'list_rule','Departments.DepartmentName' go 【思考与练习】创建一个规则对象,限制在0~20之间。然后把他绑定知道Employees表的WorkYear字段上。

删除上述建立的规则对象。

⑦创建一个表Salary3,要求所有Salary3表上EmployeeID列的值都要出现在Salary表中,利用参照完整性约束实现,要求当删除或修改Salary表上的EmployeeID列时,Salary3表中的EmployeeID值也会随之变化

create table Salary3(EmployeeID char(6)not null primary key, InCome float not null, OutCome float(8)not null, foreign key(EmployeeID)references Salary(EmployeeID)on update cascade

on delete cascade)

4、实验结果

(1)建立索引 ①【思考与练习】

a.索引创建完后在对象资源管理器中查看表中的索引。

b.了解索引的分类情况

答:索引分为两类:分别是聚集索引和非聚集索引,其中有唯一索引和复合索引。每一个表中只可以有一个聚集索引,但可以有多个非聚集索引。c.使用CREATE INDEX语句能创建主题吗? 不可以

d.在什么情况下可以看到建立索引的好处? 当要在庞大的数据库中寻找自己想要的数据的时候,建立索引是很有好处的,优点如下:

第一:通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

第二:可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三:可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

第四:在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

②【思考与练习】

a.使用界面方式创建一个复合索引。

b.在Employees表的表设计窗口选择Address列,右击选择“索引/键”菜单项,在新窗口中的Address列创建一个唯一的索引。

c.创建一个数据量很大的新表,查看使用索引和不使用索引的区别。

(2)重建索引。

【思考与练习】重建表Employees中EmployeeID列上的索引。USE YGGL GO create index employid_ind ON Employees(EmployeeID)GO ALTER INDEX employid_ind ON Employees REBUILD GO

(3)删除索引。

【思考与练习】

a.使用QROP INDEX一次删除Employees表上的多个索引

USE YGGL GO DROP INDEX Employees.depart_ind,Employees.Employ_ind GO

b使用界面方式删除Department表上的索引。

(4)数据完整性。

②【思考与练习】

a.使用T-SQL命令创建一个新表,使用一个复合列作为主键,作为表的约束,并为其命名。

USE YGGL GO CREATE TABLE Employ(EmployeeID char(8)NOT NULL, Name char(10)NOT NULL, Sex bit NOT NULL, Education char(5), CONSTRAINT UK_id PRIMARY KEY(EmployeeID,Name,Sex))

b.使用语句为表ALTER TABLEEmployees5添加一个新列Address,并为该列定义UNIQUE 约束。

USE YGGL GO ALTER TABLE Employees5 ADD Address varchar(40)NULL CONSTRAINT USK_id UNIQUE GO

C.使用界面方式为一个新表定义主键和UNIQUE约束,并了解如何使用图形向导方式删除主键和UNIQUE约束。

③【思考与练习】

向该表插入数据,“性别”列插入“男”和“女”以外的字符,查看会发生什么情况。

④【思考与练习】

a.向表中插入数据,查看OUTCOME值比INCOME值大是会有什么情况。

INSERT 语句与CHECK 约束“CK__Salary2__1A14E395”冲突。该冲突发生于数据库“YGGL”,表“dbo.Salary2”。

语句已终止。

b.创建一个表Employees6,只考虑“学号”和“出生日期”两列,出生日期必须晚于1980年1月1日。USE YGGL

GO CREATE TABLE Employees6(学号 char(6)NOT NULL,出生日期

varchar(20)NOT NULL

CHECK(出生日期>'1980-1-1'))

⑤【思考与练习】测试CHECK约束的有效性。

insert into Employees6 values('001','1980-1-0')

INSERT 语句与CHECK 约束“CK__Employees6__出生日期__1BFD2C07”冲突。该冲突发生于数据库“YGGL”,表

“dbo.Employees6”, column '出生日期'。语句已终止。结果是:上面的记录添加不进去.表现出了check的有效性.⑥【思考与练习】创建一个规则对象,限制在0~20之间。然后把他绑定知道Employees表的WorkYear字段上。USE YGGL

GO CREATE RULE Emp_rule

AS @Emp like'[0-20]' GO EXEC sp_bindrule 'Emp_rule','Employees.WorkYear' GO

删除上述建立的规则对象。USE YGGL

GO EXEC sp_unbindrule 'Employees.WorkYear' DROP RULE Emp_rule GO

⑦a.创建完Salary3表后,初始化该标的数据与salary表相同。删除salary表中一行数据,在查看salary3表的内容,看看会发生什么情况。

B.使用ALTER TABLE语句向salary表中的EmployeeID列上添加一个外键,要求EmployeeIs表中要删除或修改与EmployeeID值有关的行时,检查Salary表中有没有与该EployeeID值相关的记录,如果存在则拒绝更新Emloyees表。C.在对象资源管理器中建立Departments、Employees和Salary三个表之间的参照关系。

下载年整理数据库嵌套查询实验报告[共5篇]word格式文档
下载年整理数据库嵌套查询实验报告[共5篇].doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    数据库实验报告

    数据库系统原理课程设计 总结报告 学院: 软件学院 专业: 软件工程 年级: 2009 学号: 20092647 姓名: 李野 1、开发环境 Windows7系统 2、DBMS系统架构 采用向量的存储结构存储数......

    数据库实验报告

    10包三 李雅 100910306 实验报告 一、 实验题目: 数据库基本操作实验 二、 实验目的: 掌握数据库的建立、表的设计基本方法,通过实际操作熟练掌握数据库的基本操作——数据的输......

    数据库实验报告

    课 程 实 验 报 告 课程名称: 数据库系统概论专业班级:计科1207班学号: U201215002 姓名: 李文勇 指导教师:江胜报告日期: 2015年6月8日计算机科学与技术学院 目 录 1 实验一 基......

    数据库实验报告

    数据库实验报告 一、题目要求 某银行准备开发一个银行业务管理系统,通过调查,得到以下的主要需求: 银行有多个支行。各个支行位于某个城市,每个支行有唯一的名字。银行要监控每......

    数据库实验报告

    实验4SQL高级应用 【实验目的】 1、掌握在SQL SERVER 2005下进行数据还原的方法。 2、掌握SQL语句的查询统计功能和数据更改功能。 【实验内容】 1. 还原factory数据库。 2......

    数据库实验报告

    南华大学 计算机科学与技术学院 实验报告 ( 2013 ~2014 学年度 第二学期 ) 课程名称 实验名称 数据库原理与技术 姓名 张涛 学号 20124350230 专业 软件工程 班级 02班 地点......

    数据库实验报告(共五则范文)

    《数据库原理》实验报告一 学号:E01114193 姓名:刘雪平年级:计科三班 成绩: 实验名称:管理数据库 实验日期:2013年4月11日 实验目的: (1)熟练掌握在企业管理器中创建数据库的方法。......

    数据库原理实验报告

    南 京 晓 庄 学 院 《数据库原理与应用》 课程实验报告 实验一 SQL Server 2005常用服务与实用工具实验 所在院(系): 数学与信息技术学院 班级: 学号: 姓名: 1.实验目的 (1......