数据库查询 实验报告优选.docx

上传人:b****8 文档编号:9582503 上传时间:2023-02-05 格式:DOCX 页数:15 大小:139.01KB
下载 相关 举报
数据库查询 实验报告优选.docx_第1页
第1页 / 共15页
数据库查询 实验报告优选.docx_第2页
第2页 / 共15页
数据库查询 实验报告优选.docx_第3页
第3页 / 共15页
数据库查询 实验报告优选.docx_第4页
第4页 / 共15页
数据库查询 实验报告优选.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据库查询 实验报告优选.docx

《数据库查询 实验报告优选.docx》由会员分享,可在线阅读,更多相关《数据库查询 实验报告优选.docx(15页珍藏版)》请在冰豆网上搜索。

数据库查询 实验报告优选.docx

数据库查询实验报告优选

最新文件----------------仅供参考--------------------已改成-----------word文本---------------------方便更改

赠人玫瑰,手留余香。

 

实验报告

 

课程名称:

数据库系统概论

学院:

工程学院

专业:

年级:

班级:

姓名:

学号:

指导教师:

 

2015年12月10日

教务处制

实验名称:

数据库查询实验二

时间:

2015-12-10

地点:

三教205机房

班组:

教师评语

成绩

教师签名

实验报告

1 实验目的

   1. 熟悉数据库的交互式SQL工具;

   2. 熟悉通过SQL对数据库视图进行操作;

   3. 掌握通过SQL插入、更新、删除数据等操作。

2 实验工具KingbaseES

    利用KingbaseES及其交互式查询工具ISQLW来熟悉SQL。

3 实验内容和要求

1.   在建立3.2节学生-课程数据库的基础上,完成课本例3.69-97的各例题;

2. 根据以下要求认真填写实验报告,记录所有的实验用例。

4实验方法及步骤

例3.69将一个新学生元组(学号:

201215128,姓名:

陈东,性别:

男,年龄:

18,所在系:

IS)插入到student表中。

INSERTINTO"S-C"."STUDENT"

("SNO","SNAME","SSEX","SDEPT","SAGE")

VALUES('201215128','陈冬','男','IS',18);

select*from"S-C"."STUDENT"

注意:

在INTO子句中指出了表名student,并指出了新增加的元组在哪些属性上要赋值,属性的顺序可以与CREATETABLE中的顺序不一样。

例3.70将学生张成民的信息插入到student表中。

INSERTINTO"S-C"."STUDENT"

VALUES

('201215126','张成民','男','18','CS');

select*from"S-C"."STUDENT"

注意:

值与属性要一一对应。

例3.71插入一条选课记录('201215128','1')

INSERTINTO"S-C".sc(sno,cno)

VALUES

('201215128','1');

SELECT*

from"S-C".sc;

注意:

在新插入的记录中GRADE列自动地赋空值。

或者:

INSERTINTO"S-C".sc

VALUES

('201215128','1',null);

SELECT*

from"S-C".sc;

注意:

若直接在SC中直接插入选课记录,由于没有指出SC的属性名,在GRADE列上要明确给出空值NULL。

例3.72对每一个系,求学生的平均年龄,并把结果存入数据库中。

创建新表

CREATETABLEdept_age(

sdeptCHAR(15),

avg_agesmallint

);

把系名和平均年龄存入新表

insert

intodept_age(Sdept,avg_age)

selectsdept,avg(sage)

from"S-C".student

groupbysdept;

例3.73将学生200215121的年龄改为22岁。

UPDATE"S-C"."STUDENT"

SETSage=22

WHEREsno=200215121;

select*

from"S-C".student;

例3.74将所有学生的年龄增加1岁。

UPDATE"S-C"."STUDENT"

SETSage=sage+1;

select*

from"S-C".student;

例3.75将计算机科学系全体学生的成绩置零。

UPDATE"S-C"."SC"

SETGrade=0

wheresnoin

(selectsno

from"S-C".student

wheresdept='cs');

SELECT*

FROM"S-C".SC;

例3.76删除学号为201215128的学生记录。

DELETE

from"S-C".student

WHEREsno='201215128';

select*

from"S-C".student;

例3.77删除所有学生选课记录

DELETE

FROM"S-C".SC;

SELECT*

FROM"S-C".SC;

注意:

这条DELETE语句将使SC成为空表,它删除了SC的所有元组。

例3.78删除计算机科学系所有学生的选课记录

SELECT*

FROM"S-C".SC;

DELETEfrom"S-C".sc

WHEREsnoin

(selectsnofrom"S-C".student

wheresdept='cs');

注意:

由于SC表全是CS系的,故结果为空表。

例3.79向SC表中插入一个元组

INSERTINTO"S-C".SC(SNO,CNO,GRADE)

VALUES('201215128','1',NULL);/*在插入该学生还没有考试成绩,取空值*/

或者:

INSERTINTO"S-C".SC(SNO,CNO)

VALUES('201215126','1');/*在插入语句中没有赋值的属性,其值为空值*/

SELECT*FROM"S-C"."SC";

例3.80将student表中学生号201215123的学生所属的系改为空值

UPDATE"S-C".STUDENT

SETSDEPT=NULL

WHERESNO='201215123';

SELECT*FROM"S-C"."STUDENT";

注意:

另外,外连接也会产生空值,空值的关系运算也会产生空值。

例3.81从student表中查找出漏填了数据的学生信息

SELECT*

FROM"S-C".STUDENT

WHERESNAMEISNULLORSSEXISNULLORSDEPTISNULL;

SELECT*FROM"S-C"."STUDENT";

例3.82找出选修1号课程的不及格的学生

SELECTSNO

FROM"S-C".SC

WHEREGRADE<60ANDCNO='1';

注意:

选出的学生是那些参加了考试而不及格的学生,不包括缺考的学生。

例3.83找出选修1号课程的不及格的学生以及缺考的学生

SELECTSNOFROM"S-C".SC

WHEREGRADE<60ANDCNO='1'

UNION

SELECTSNOFROM"S-C".SC

WHEREGRADEISNULLANDCNO='1';

SELECT*FROM"S-C"."STUDENT";

例3.84建立信息系学生的视图

CREATEVIEWIS_STUDENT

AS

SELECTSNO,SNAME,SAGE

FROM"S-C".STUDENT

WHERESDEPT='IS';

SELECT"SNO","SNAME","SAGE"FROM"S-C"."IS_STUDENT";

例3.85建立信息系选修了1号课程的学生视图,并要求进行修改和插入操作时仍保证该视图只有信息系的学生。

CREATEVIEWIS_STUDENT

AS

SELECTSNO,SNAME,SAGE

FROM"S-C".STUDENT

WHERESDEPT='IS'

WITHCHECKOPTION;/*如果不加这个语句,可以把IS修改成其他的系,比如CS,加上这个语句之后会发现改不了,只能是IS*/

SELECT"SNO","SNAME","SAGE"

FROM"S-C"."IS_STUDENT";

例3.86建立信息系选修了1号课程的学生视图(包括学号、姓名、成绩)

CREATEVIEWIS_S1(SNO,SNAME,GRADE)

AS

SELECTSTUDENT.SNO,SNAME,GRADE

FROM"S-C".STUDENT,"S-C".SC

WHERESDEPT='IS'AND

STUDENT.SNO=SC.SNOANDSC.CNO='1';

SELECT"SNO","SNAME","GRADE"

FROM"S-C"."IS_S1";

 

例3.87建立信息系选修了1号课程且成绩在90分以上的学生视图

CREATEVIEWIS_S2

AS

SELECTSNO,SNAME,GRADE

FROM"S-C".IS_S1

WHEREGRADE>=90;

SELECT"SNO","SNAME","SAGE"

FROM"S-C"."IS_STUDENT";

注意:

这里的视图IS_S2就是建立在IS_S1之上的。

例3.88定义一个反应学生出生年份的视图

CREATEVIEWBT_S(SNO,SNAME,SBIRTH)

AS

SELECTSNO,SNAME,2014-SAGE

FROM"S-C".STUDENT;

SELECT"SNO","SNAME","SBIRTH"

FROM"S-C"."BT_S";

注意:

这里的视图BT_S是一个带表达式的视图。

视图中的出生年份值是通过计算得到的。

还可以用带有聚集函数和GROUPBY子句的查询来定义视图,这种视图称为分组视图。

例3.89将学生的学号及平均成绩定义为一个视图

CREATEVIEWS_G(SNO,GAVG)

AS

SELECTSNO,AVG(GRADE)

FROM"S-C".SC

GROUPBYSNO;

SELECT"SNO","GAVG"

FROM"S-C"."S_G";

注意:

由于AS子句中的SELECT语句的目标列平均成绩是通过作用聚集函数得到的,所以CREATEVIEW中必须明确定义组成S_G视图的各个属性列名。

S_G是一个分组视图。

例3.90将student表中所有女生记录定义为一个视图

CREATEVIEWF_STUDENT(F_SNO,NAME,SEX,AGE,DEPT)

AS

SELECT*FROM"S-C".STUDENT

WHERESSEX='女';

SELECT"F_SNO","NAME","SEX","AGE","DEPT"

FROM"S-C"."F_STUDENT";

注意:

这里视图F_STUDENT是由子查询“SELECT*”建立的。

F_STUDENT视图的属性列要与STUDENT表的属性一一对应。

否则会出错。

例3.91删除视图BT_S和视图IS_S1

DROPVIEWBT_S;/*成功执行*/

DROPVIEWIS_S1;/*拒绝执行*/

执行此语句时由于IS_S1视图上还导出了IS_S2视图,所以该语句被拒绝执行。

如果确定要删除,则使用级联删除语句。

DROPVIEWIS_S1CASCADE;/*删除了视图IS_S1和由它导出的所有视图*/

例3.92在信息系学生视图中找出年龄小于20岁的学生

SELECTSNO,SAGEFROM"S-C".IS_STUDENT

WHERESAGE<20;

注意:

视图定义后,用户可以像对基本表一样对视图进行查询了。

例3.93查询选修了1号课程的信息系学生

SELECTIS_STUDENT.SNO,SNAME

FROM"S-C".IS_STUDENT,"S-C".SC

WHEREIS_STUDENT.SNO=SC.SNOANDSC.CNO='1';

例3.94在S_G视图中查询平均成绩在90分以上的学生的学号和平均成绩

SELECTSNO,AVG(GRADE)

FROM"S-C".SC

GROUPBYSNO

HAVINGAVG(GRADE)>=90;

或者:

SELECT*

FROM(SELECTSNO,AVG(GRADE)/*子查询生成一个派生表S_G*/

FROM"S-C".SC

GROUPBYSNO)ASS_G(SNO,GAVG)

HAVINGGRADE>=90;

注意:

WHERE子句中不能用聚集函数作为条件表达式。

视图一旦定义,其定义将永久保存在数据字典中,之后的所有查询都可以直接引用该视图。

而派生表株数在语句执行时临时定义,语句执行后该定义将被删除。

例3.95将信息系学生视图IS_STUDENT中学号为“200215125”的学生姓名改为“刘辰”

UPDATEIS_STUDENT

SETSNAME='刘辰'

WHERESNO='200215125';

SELECT"SNO","SNAME","SAGE"

FROM"S-C"."IS_STUDENT";

例3.96将信息系学生视图IS_STUDENT中插入一个新的学生记录,其中学号为“201215129”,姓名为“赵新”,年龄为20岁

INSERT

INTO"S-C".STUDENT(SNO,SNAME,SAGE,SDEPT)

VALUES('201215129','赵新',20,'IS');

SELECT"SNO","SNAME","SAGE"

FROM"S-C"."IS_STUDENT";

例3.97删除信息系学生视图IS_STUDENT中学号为“201215129”的记录。

DELETE

FROM"S-C".STUDENT

WHERESNO='201215129'ANDSDEPT='IS';

SELECT"SNO","SNAME","SAGE"

FROM"S-C"."IS_STUDENT";

5实验结果及总结

1.若直接在SC中直接插入选课记录,由于没有指出SC的属性名,在GRADE列上要明确给出空值NULL。

2.由于AS子句中的SELECT语句的目标列平均成绩是通过作用聚集函数得到的,所以CREATEVIEW中必须明确定义组成S_G视图的各个属性列名。

S_G是一个分组视图。

3.视图F_STUDENT是由子查询“SELECT*”建立的。

F_STUDENT视图的属性列要与STUDENT表的属性一一对应。

否则会出错。

4.视图定义后,用户可以像对基本表一样对视图进行查询了。

5.WHERE子句中不能用聚集函数作为条件表达式。

视图一旦定义,其定义将永久保存在数据字典中,之后的所有查询都可以直接引用该视图。

而派生表株数在语句执行时临时定义,语句执行后该定义将被删除。

6.DB2规定:

1)若视图是由两个以上基本表导出的,则此视图不允许更新。

2)若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行delete操作。

3)若视图的字段来自聚集函数,则此视图不允许更新

4)若视图定义中含有GroupBy子句,则此视图不允许更新

5)若视图定义中含有DISTINGCT短语,则此视图不允许更新

6)若视图定义中有嵌套查询,并且内层查询的from子句中设计的表也是导出该视图的基本表,则此视图不允许更新。

例如,将SC中成绩在平均成绩之上的元组定义成一个视图GOOD_SC:

CREATEVIEWGOOD_SC

AS 

SELECTSno,Cno,GradeFROM"S-C".SC

WHEREGrade>

(SELECTAVG(Grade)

FROM"S-C".SC);

不允许更新

7)一个不允许更新的视图也是不允许更新

 

最新文件----------------仅供参考--------------------已改成-----------word文本---------------------方便更改

赠人玫瑰,手留余香。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1