管理数据库原理与开发实验报告.docx
- 文档编号:25073636
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:19
- 大小:87.73KB
管理数据库原理与开发实验报告.docx
《管理数据库原理与开发实验报告.docx》由会员分享,可在线阅读,更多相关《管理数据库原理与开发实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
管理数据库原理与开发实验报告
《管理数据库原理与开发》
实验报告
学号:
姓名:
学院:
专业:
实验一:
DDL语言
实验目的:
学会并熟练应用数据定义语言DDL,学习创建数据库,表,索引
实验地点:
生物楼805
实验内容:
熟悉SQLServer
SQL即结构化查询语言,其特点是:
综合统一,高度非过程化,面向集合的操作方式,以同一种语法结构提供多种使用方式,语言简单,易学易用。
一,定义模式
Createschema<模式名>authorization<用户名>
例如:
定义一个学生-课程模式S-T
createschema“s-t”authorizationWANG;
二,删除模式
Dropschema<模式名>
三,定义基本表
建立一个“学生”表student
Createtablestudent
(snochar(9)primarykey,
Snamechar(20)unique,
Ssexchar
(2),
Sagesmallint,
Sdeptchar(20)
);
命令完成后
四,修改基本表
Altertable
[add<新列名><数据类型>[完整性约束]]
[drop<完整性约束名>]
[altercolumn<.列名><.数据类型>];
如:
向student表增加“入学时间”列,其数据类型为日期型。
Altertablestudentadds_entrancedate;
五,删除基本表
Droptable<表名>[restrict/cascade];
如:
删除学生表
Droptablestudentcascade
六,建立索引
Create[unique][cluster]index<索引名>
On<表名>(<列名>[<次序>][,<列名>[<次序>]]…);
Unique---索引值只对应唯一的数据记录
Cluster---索引是聚簇索引
如:
在student表的sname列上建立一个聚簇索引
createclusterindexstusnameonstudent(sname)
七,删除索引
Dropindex<索引名>;
如:
删除student表的stusname索引
Dropindexstusname;
实验心得:
通过这次的实验,我熟悉了有关DDL的一系列操作,包括定义,修改,删除基本表。
不过对修改基本表的操作还不太熟悉,今后要多练习,加强这方面的基本功。
实验二:
数据查询
实验目的:
熟悉应用select语句。
实验地点:
生物楼805
实验内容:
一单表查询
1查询指定列
例:
查询全体学生的学号与姓名
Selectsno,sname
Fromstudent
2查询全部列
例:
查询全体学生的详细记录
Select*
Fromstudent
=selectsno,sname,ssex,sage,sdept
Fromstudent
3查询经过计算的值
例:
查询全体学生的姓名及其出生年份
Selectsname,2004-sage
Fromstudent
二选择表中的若干元组
1消除取值重复的行
可以用distinct取消
例:
selectdistinctsno
Fromsc
执行结果为:
2查询满足条件的元组
可以通过where子句实现
(1)比较大小
运算符包括:
=<>=<=!
=<>!
>!
<
例:
查询所有年龄在20岁以下的学生姓名及其年龄
Selectsname,sage
Fromstudent
Wheresage<20
(2)确定范围
用between…and…和notbetween…and…
例:
查询年龄在20~30岁之间的学生姓名、系别和年龄
Selectsname,sdept,sageFromstudent
Wheresagebetween20and23
(3)确定集合
用in和notin
例:
select*fromstudentwheresdeptin('cs','ma');
(4)字符匹配
用like进行字符串的匹配
例:
查询学号为200215121的学生的详细情况
Select*Fromstudent
Wheresnolike‘200215121’
例:
查询所有姓刘的学生的姓名、学号和性别
Selectsname,sno,ssexFromstudent
Wheresnamelike‘刘%’;
(5)涉及空值的查询
例:
select*fromstudentwheresdeptisnull;
(6)多重条件的查询
逻辑运算符and和or可用来连接多个查询条件
例:
select*fromstudentwheresdept='cs'andsage<24;
三、orderby子句
可以用orderby子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省值为升序
例:
select*fromscwherecno='3'orderbygradedesc;
四:
聚集函数
(countsumavgmaxmin)
例:
查询选课成绩小于该课程平均成绩的学生学号、课程及成绩
selectsno,cno,gradefromscscxwheregrade<
(selectavg(grade)fromscscygroupbycnohavingo=o);
五,groupby子句
Groupby子句将查询结果按某一行或多列的值分组,值相等的为一组
例:
求各个课程号及相应的选课人数
Selectcno,count(sno)
FromscGroupbycno;
3.4.2连接查询
一、等值与非等值连接查询
连接查询的where子句中用来连接两个表的条件称为连接条件
当运算符为=时,称为等值连接。
使用其他运算符称为非等值连接
例:
查询每个学生及其选修课程的情况
Selectstudent.*,sc.*Fromstudent,scWherestudent.sno=sc.sno
二,自身连接
例:
查询每一门课的间接选修课
Selecto,second.cpnoFromcoursefirst,coursesecond
Wherefirst.cpno=o
三,外连接
例:
selectstudent.sno,sname,ssex,sage,sdept,cno,grade
Fromstudentleftoutjoinscon(student.sno=sc.sno);
四,复合条件连接
Where子句中可以有多个连接条件,称为复合条件连接
例:
查询选修2号课程且成绩在90分以上的所有学生
Selectstudent.sno,sname
Fromstudent,sc
Wherestudent.sno=sc.snoando=’2’andsc.grade>90
3.4.3嵌套查询
将一个查询块嵌入另一个查询块的where子句或having短语的条件中的查询称为嵌套查询
一,带有in谓词的子查询
例:
查询与刘晨在同一个系的学生
Selectsno,sname,sdeptFromstudent
Wheresdeptin(selectsdept
Fromstudent
Wheresname=’刘继平’);
二、带有比较运算符的子查询
例:
找出每个学生超过他选修课平均成绩的课程号
Selectsno,cno
Fromscx
Wheregrade>=(selectavg(grade)
Fromscy
Wherey.sno=x.sno);
三,带有any(some)或all谓词的子查询
例:
查询其他系中比计算机科学系某一学生年龄小的学生姓名和年龄
Selectsname,sageFromstudent
Wheresage
四,带有exists谓词的子查询
带有exists谓词的子查询不返还任何数据,只产生逻辑真值‘true’或‘false’
其目标列表达式通常都用*
例:
查询所有选修了1号课程的学生姓名
Selectsname
Fromstudent
Whereexists
(select*FromscWheresno=student.snoandcno=’1’);
例:
查询选修了全部课程的学生姓名
Selectsname
Fromstudent
Wherenotexists
(select*fromcourse
Wherenotexists
(select*fromscWheresno=student.snoAndcno=o));
3.4.4集合查询
集合操作主要包括并操作union、交操作intersect和差操作except
例:
查询计算机科学系的学生及年龄不大于19岁的学生
Select*
Fromstudent
Wheresdept=’cs’
Union
Select*fromstudent
Wheresage<=19;
实验心得:
通过几节课的学习和练习,我逐渐掌握了select语句.select语句是数据库中很重要的一节内容,没掌握它就没掌握数据库。
在学习过程中我也体会到它的灵活性和便捷性。
实验三:
数据更新,视图定义
实验目的:
学会更新3种操作:
向表中添加若干行数据、修改表中的数据和删除表中的若干行数据。
掌握对视图的定义,查询,删除及试图更新(增,删,改)
实验地点:
生物楼805
实验内容:
<一>插入数据
一插入元组
Insert
Into<表名>(属性列)
Values(<常量>…)
例:
将一个新学生元组(学号:
200215128;姓名:
陈东;性别:
男;所在系:
IS;年龄:
18)插入到student表中。
Insert
Intostudent(sno,sname,ssex,sdept,sage)
Values(‘200215128’,陈东,’男’,’IS’,18);
二、插入子查询结果
例:
对每一个系,求学生的平均年龄,并把结果存入数据库-
CreatetableDept_age(sdeptchar(15)Avg_agesmallint);
Insert
IntoDept_age(sdept,avg_age)
Selectsdept,avg(sage)
Fromstudent
Groupbysdept;
<二>修改数据
Update<表名>
Set<列名>=<表达式>
Where<条件>
一修改某一个元组的值
例:
将学生200215129的年龄改为22岁
UpdatestudentSetsage=22
Wheresno=’200215129’
例:
将数学成绩加10
Updatesc
Setgrade=grade+10
Where‘数学’=(selectcnamefromcoursewhereo=o)
<三>删除数据
一删除某一个元组的值
Delete
From<表名>
[where<条件>];
例:
删除学号为200215128的学生记录
DelectFromstudent
Wheresno=’200215128’;
二删除多个元组的值
例:
删除所有的学生选课记录
DelectFromsc
<四>定义视图
一建立视图
Createview<视图名>
As<子查询>
[withcheckoption]
例:
建立信息系学生的视图
CreateviewIS_student
As
Selectsno,sname,sage
Fromstudent
Wheresdept=’IS’;
二删除视图
Dropview<视图名>[cascade]
<五>查询视图
例:
在信息系学生的视图中找出年龄小于22岁的学生
Selectsno,sageFromIS_stduentWheresage<22
<六>更新视图
更新视图是指通过视图来插入(insert)、删除(delete)修改(update)数据。
例:
将信息系学生视图IS_student中学号为200215122的学生姓名改为“刘辰”
UpdateIS_student
Setsname=’刘辰’
Wheresno=’200215122’;
实验心得:
数据更新让我们能够对于已有的数据进行修改,保证了数据库数据的时效性。
其中包括插入,修改和删除。
并不是很复杂。
在视图部分的操作和对基本表的操作相似,承前启后,把两部分内容联系起来,学习就变得容易些。
实验四:
授权
实验目的:
掌握SQL中的grant语句和revoke语句,对用户和角色进行授权。
实验地点:
生物楼805
实验内容:
一、grant
形式为:
grant<权限>
On<对象类型>
To<用户>
[withgrantoption];(可以把相应权限或其子集传递授予给其他用户)
例:
把查询student表的权限授给用户zhangsan
Grantselect
Ontablestudent
Tozhangsan
例:
把对SC的所有操作权利授给zhangsan
grantallprivilegesonsctozhangsan
例:
将修改sno,查询student的权利授给zhangsan
grantupdate(sno),selectonstudenttozhangsan
例:
张三可以把相应权利授给他人
grantinsertoncoursetozhangsanwithgrantoption
二、revoke
例:
把用户zhangsan对student的查询权限收回
Revokeselect
Ontablestudent
Fromzhangsan;
例:
将zhangsan修改sno的权利收回
revokeupdate(sno)onstudentfromzhangsan
实验心得:
此节内容主要是讲述对具体用户的权限进行授权,以保证数据库的安全性。
Grant语句和前面的语句也没有很大差别,我们可以根据具体需要给用户分配查询或修改权限,加上withgrantoption还可以将权限传给下一人。
我们还可以用revokefrom将权限收回。
实验五:
数据库完整性
实验目的:
通过具体操作使数据库满足实体完整性,参照完整性,以及用户自定义的完整性,还可用constraint对完整性约束命名。
实验地点:
生物楼805
实验内容:
一实体完整性
例:
将course表中cno设为主码
altertablecourseaddconstraintc1primarykey(cno)
二参照完整性
例:
定义sc中的参照完整性
createtablesc
(snochar(9)notnull,
cnochar(4)notnull,
gradesmallint,
primarykey(sno,cno),
foreignkey(sno)referencesstudent(sno),
foreignkey(cno)referencescourse(cno));
三用户自定义完整性
例:
定义表中的ssex只允许取“男”或“女”。
createtableye
(snochar(9)primarykey,
snamechar(8)notnull,
ssexchar
(2)check(ssexin('男','女')),
sagesmallint,
sdeptchar(20));
四完整性约束命名子句
CONSTRAINT<完整性约束条件名》[PRIMARYKEY短语、FOREIGNKEY短语、CHECK短语]
例:
修改表中的完整性限制,要求学号在0~999999999之间。
altertablestudent
addconstraintc1check(snobetween0and999999999)
例:
修改表中的完整性限制,要求年龄在30岁以下。
altertablestudent
addconstraintc2check(sage<30)
实验心得:
通过本节内容学习,我学会了运用primarykey和foreignkey来定义完整性约束。
保证数据库的插入,删除正常。
也学会了用constraint对完整性命名。
但是还不能熟练运用constraint,以后还要多练习
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 管理 数据库 原理 开发 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)