数据库查询 实验报告优选.docx
- 文档编号:9582503
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:15
- 大小:139.01KB
数据库查询 实验报告优选.docx
《数据库查询 实验报告优选.docx》由会员分享,可在线阅读,更多相关《数据库查询 实验报告优选.docx(15页珍藏版)》请在冰豆网上搜索。
数据库查询实验报告优选
最新文件----------------仅供参考--------------------已改成-----------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文本---------------------方便更改
赠人玫瑰,手留余香。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库查询 实验报告优选 数据库 查询 实验 报告 优选