数据库实验.docx
- 文档编号:29680317
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:70
- 大小:498.14KB
数据库实验.docx
《数据库实验.docx》由会员分享,可在线阅读,更多相关《数据库实验.docx(70页珍藏版)》请在冰豆网上搜索。
数据库实验
实验D001:
数据库及表的建立和管理实验
一、实验名称和性质
所属课程
数据库原理
实验名称
数据库、数据表的建立与数据的插入
实验学时
2
实验性质
□验证□综合✓设计
必做/选做
✓必做□选做
二、实验目的
1.了解和掌握SQLServer系统。
2.掌握数据库建立的几种方法。
3.掌握数据表的建立方法和数据表中数据的插入方法。
三、实验的软硬件环境要求
硬件环境要求:
PC机(单机)。
使用的软件名称、版本号以及模块:
WindowsXP下的SQLServer2005(或SQLServer2008)。
四、知识准备
前期要求掌握的知识:
1.SQLServer2005平台构成:
数据库引擎。
分析服务(AnalysisServices)。
集成服务(IntegrationServices)。
复制技术。
通知服务(NotificationServices)。
报表服务(ReportingServices)。
服务代理(ServiceBroker)。
全文搜索。
2.SQLServer2005安装成功后,系统会自动创建4个系统数据库:
Master、Model、Msdb、Tempdb。
3.SQLServer2005中最重要的管理工具:
“SQLServerManagementStudio”(简称“SSMS”)。
五、实验内容
1.创建数据库和查看数据库属性。
2.在“SSMS”中和查询编辑器中创建数据表。
3.“SSMS”中和查询编辑器中数据表中数据的插入。
六、验证性实验
(一)在“SSMS”中创建数据库、数据表和进行数据插入
1.创建数据库
(1)使用“SSMS”建立数据库的步骤
1)单击“开始”菜单下“所有程序”→“MicrosoftSQLServer2005”→“SQLServerManagementStudio”,如图3-1所示。
图3-1SQLServer2005启动
2)在连接到服务器窗口中选择服务器名,单击”连接”按钮,如图3-2所示.。
3)进入到“MicrosoftSQLServerManagementStudio(SSMS)”,如图3-3所示.。
图3-2SQLServer2005连接服务器界面图3-3“SSMS”界面
4)选中“数据库”文件夹,单击鼠标右键,在弹出菜单上选择“新建数据库”。
随后在数据库属性对话框的常规页面中,输入数据库名“学生选课”,如图3-4所示。
新建数据库属性对话框有3个页面:
常规、选项和文件组。
常规选项分别用来义数据库名、数据文件属性和日志文件属性。
选项是对数据库中游标\状态等信息的设置。
5)单击“确定”按钮,关闭对话框。
在“SSMS”窗口中出现“学生选课”数据库标志,如图3-5所示,表明已经成功创建数据库。
图3-4新建数据库界面图3-5数据库建立成功界面
6)在“SSMS”中,右键单击“学生选课”数据库,在弹出菜单中选择“属性”,将弹出一个对话框,显示“学生选课”数据库的属性,如图3-6所示。
2.创建数据库表
(1)打开刚才创建的“学生选课”数据库,并在“SSMS”窗口的右边窗口中用鼠标右键点击“表”对象,选择“新建表”命令,打开表编辑器窗口,如图3-7所示。
图3-6数据库属性窗口图3-7表编辑器界面
(2)根据表3-1所示的表结构,添加新列。
表3-1学生表
列名
数据类型
长度
是否允许为空
学号
Varhar
10
N
姓名
Varhar
20
N
性别
Char
2
Y
出生日期
Smalldatetime
4
Y
专业名
Varhar
20
Y
所在系
Varhar
20
Y
联系电话
Varhar
20
Y
(3)点击工具栏上的“保存”按钮,在弹出的“选择名称”对话框中输入表名“学生-
表”,然后单击“确定”按钮,完成新表的创建。
(4)同理,根据表3-2建课程表,根据表3-3建选课表
表3-2课程表
列名
数据类型
长度
是否允许为空
课程号
Char
6
N
课程名
Char
20
N
学时
Tinyint
1
N
学分
Tinyint
1
N
表3-3选课表
列名
数据类型
长度
是否允许为空
学号
Char
6
N
课程号
Char
3
N
成绩
Tinyint
1
Y
3.使用“SSMS”向数据库表输入数据、修改数据、删除数据。
(1)打开“SSMS”,选中服务器,展开数据库文件夹,进一步展开“学生选课”数据库。
单击表文件夹,找到“学生表”。
(2)用鼠标右键单击“学生表”,选择“打开表”――“返回全部行,就会出现表更新对话框,如图3-8所示。
图3-8记录输入界面
(3)参考表3-4的内容,为学生表输入数据。
(二)在查询编辑器中创建数据库、数据表和进行数据插入
1.在“SSMS”中,点击工具栏中的第一个按钮“新建查询”,如图3-9所示。
图3-9查询编辑器的打开
打开查询编辑器的窗口,如图3-10所示。
图3-10查询编辑器
2.在查询编辑器的右窗口中输入T-SQL语句:
createdatabasestudent
选中该语句并执行(单击工具栏的“执行”按钮),出现
命令已成功
表示数据库成功建立。
3.用T-SQL语句创建数据表STUD:
USESTUDENT
CREATETABLESTUD(SNOVARCHAR(10)NOTNULL,SNAMEVARCHAR(20)NOTNULL,SEXCHAR
(2),BIRTHDAYDATETIME)
选中上述语句并执行,出现
命令已成功完成
表示数据表已经建立好。
可以在“对象浏览器”中的STUDENT数据库上右击鼠标,并单击“刷新”,然后展开“用户表”,可以看到STUD数据表。
4.向STUD数据表中插入数据记录。
INSERTINTOSTUDVALUES(’200512’,’Josephine’,’F’,’1980-12-20’)
选中上述语句并执行,出现
所影响的行数为1行
表示数据已经插入到数据表中。
七、设计性实验
1.实验要求
(1)创建XSDA数据库。
(2)在XSDA数据库中创建三个数据表:
S(SNOVARCHAR(10)NOTNULL,SNAMEVARCHAR(20),DEPAVARCHAR(20),AGEINT,SEXCHAR(4))
C(CNOVARCHAR(10)NOTNULL,CNAMEVARCHAR(20),cpnovarchar(10),creditint)
SC(SNOVARCHAR(10)NOTNULL,CNAMEVARCHAR(10)NOTNULL,GRADEDECIMAL)
(3)在3个表中输入如下数据。
表3-4学生表
学号
姓名
系部
年龄
性别
200512
李勇
计算机系
20
男
200518
刘晨
计算机系
19
女
200018
王敏
数学系
18
女
200511
杨扬
物理系
20
男
200510
张立
信息系
19
男
200513
张立
物理系
19
男
200514
王点点
信息系
19
女
200012
欧阳雨
数学系
20
男
200515
刘依依
数学系
23
女
表3-5课程表
课程号
课程名
前修课程
学分
c01
数据库原理
c03
4
c02
信息系统
C01
4
c03
数据结构
null
6
c04
DB_设计
co1
3
表3-6成绩表
学号
课程号
成绩
200512
c02
70
200512
c03
null
200512
c04
null
200515
c01
80
200518
c03
95
200018
c01
80
200518
c02
45
200511
c02
78
200511
c01
45
……
……
……
2.思考题
(1)SQLServer2005提供了哪些基本数据类型?
(2)数据库创建后怎样修改数据库操纵文件和数据库日志文件分配的空间大小?
(3)用数据的导入、导出实现SQL数据库之间;SQL与EXCEL之间的数据传递。
实验D002:
单表查询实验
一、实验名称和性质
所属课程
数据库原理
实验名称
单表查询
实验学时
2
实验性质
□验证□综合✓设计
必做/选做
✓必做□选做
二、实验目的
1.掌握数据的基本检索方法。
2.掌握数据查询的Groupby和Orderby子句的使用。
3.掌握聚集函数的使用方法。
三、实验的软硬件环境要求
硬件环境要求:
PC机(单机)。
使用的软件名称、版本号以及模块:
WindowsXP下的SQLServer2005(或SQLServer2008)。
四、知识准备
前期要求掌握的知识:
数据检索的语句格式:
SELECT[ALL|DISTINCT]<目标列表达式列表>
FROM<表名或视图名列表>
[WHERE<条件表达式>]
[GROUPBY<列名1>[HAVING<条件表达式>]]
[ORDERBY<列名2>[ASC|DESC]]
其中,SELECT后的目标列表达式可以是列名、表达式或函数。
GROUPBY子句:
对查询结果按指定列的值分组,该属性列值相等的元组为一个组。
通常会在每组中作用集函数。
HAVING短语:
筛选出只有满足指定条件的组
ORDERBY子句:
对查询结果表按指定列值的升序或降序排序
注意:
T-SQL语句中关键字不区分大小写
五、实验内容
1.对数据表进行简单检索。
2.对数据表进行排序检索。
3.在检索中使用聚集函数。
六、验证性实验
先选择要操作的数据库,用T-SQL命令:
USESTUDENT
或在工具栏的当前数据库中选择STUDENT,如图3-11所示。
工作数据库
图3-11查询编辑器界面
以下查询要求在逐个语句执行,执行后将执行结果记录下来:
1.条件查询全部数据
USESTUDENT
SELECT*FROMS
2.在SELECT关键字后指明要检索的列名
(1)查询S表的学生学号和姓名
SELECTSNO,SNAMEFROMS
(2)查询S表中的系部名
SELECTDEPAFROMS
(3)查询S表中不重复的系部名
SELECTDISTINCTDEPAFROMS
3.改变列标题的检索
(1)使用空格形式:
列名新标题
SELECTSNO学号,SNAME姓名FROMS
(2)使用“AS”形式,列名AS新标题
SELECTSNOAS学号,SNAMEAS姓名FROMS
3.有条件选择的查询
(1)在S表检索“信息系”的学生信息
SELECT*FROMS
WHEREDEPA=’信息系’
(2)在S表中检索姓“王”的学生信息
SELECT*FROMS
WHEREsnamelike‘王%’
(3)在SC表检索’C01’选修课成绩为空的选课记录
SELECTSNO,CNOFROMSC
WHEREcno=’C01’andgradeisnull
(4)检索年龄为21,18,22的学生学号、姓名
SELECTSNO,SNAMEFROMS
WHEREagein(21,18,22)
AgeIN{21,18,22}表示某条记录的AGE字段值是否是集合{21,18,22}中的元素,如是,则选择。
它等价于下面语句:
SELECTSNO,SNAMEFROMS
WHEREage=18orage=21orage=22
4.使用聚集函数
(1)查询选课表中最高分、平均分、最低分
SELECTMAX(GRADE),AVG(GRADE),MIN(GRADE)
FROMSC
(2)查询“C01”课程的最高分、平均分和最小成绩。
SELECTMAX(GRADE),AVG(GRADE),MIN(GRADE)
FROMSC
WHERECNO=‘C01’
5.对检索结果进行排序
SELECT*FROMSC
WHEREGRADEISNULL
ORDERBYSNO,CNODESC
6.进行分组统计:
(1)查询各学生的选课数
SELECTSNO,COUNT(*)
FROMSC
GROUPBYSNO
(2)使用HAVING字句:
“选课表”中查询选修了3门以上课程的学生学号。
SELECTSNO,COUNT(*)FROMSC
GROUPBYSNO
HAVINGCOUNT(*)>=3
(3)“选课表”中按学号分组汇总学生的平均分,并按平均分的降序排列。
SELECTSNO学号,AVG(GRADE)平均分FROMSC
GROUPBYSNO
ORDERBY平均分DESC
(4)析下面两个SELECT语句执行结果,说明有什么不同?
SELECTSNOFROMSC
ORDERBYSNO
GO
SELECTSNOFROMSC
GROUPBYSNO
7.在ORDERBY字句后带COMPUTE字句
(1)按学号对不及格的成绩记录进行汇总。
SELECTSNO,CNO,GRADEFROMSC
WHEREGRADE<60
ORDERBYSNO
COMPUTECOUNT(GRADE)
(2)按学号对不及格的成绩记录进行明细汇总(即根据排序结果进行分组汇总)
SELECTSNO,CNO,GRADEFROMSC
WHEREGRADE<60
ORDERBYSNO
COMPUTECOUNT(GRADE)BYSNO
七、设计性实验
1.实验要求
(1)查询计算机系学生的学号和姓名。
(2)查询选修了课程的学生学号。
(3)查询选修“C01”课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列。
(4)查询每门课程的平均分。
(5)查询学校开设的课程总数。
(6)查询选修两门及两门以上课程的学生学号。
(7)查询年龄在20-22之间的男生的学号、姓名、系部。
(8)查询选修“C01”课程的学生人数。
2.实验报告要求
(1)写出验证性实验的执行结果。
(2)用T-SQL完成设计性实验并写出执行结果。
(3)完成以下思考题。
3.思考题
(1)使用ORDERBY子句后SELECT后的数据列有什么限制吗?
使用GROUPBY呢?
(2)执行selectmax(grade)fromsc,写出执行结果;执行selectsno,max(grade)fromscgroupbysno,写出执行结构。
思考:
使用GROUPBY<分组条件>子句后,语句中的统计函数的运行结果有什么不同?
实验D003:
多表查询实验
一、实验名称和性质
所属课程
数据库原理
实验名称
多表查询
实验学时
2
实验性质
□验证□综合✓设计
必做/选做
✓必做□选做
二、实验目的
1.掌握多表连接查询方法。
2.掌握IN子查询的嵌套查询。
3.了解EXISTS嵌套查询方法。
三、实验的软硬件环境要求
硬件环境要求:
PC机(单机)。
使用的软件名称、版本号以及模块:
WindowsXP下的SQLServer2005(或SQLServer2008)。
四、知识准备
1.多表的连接查询(相当于做笛卡儿乘积)
SELECT<目标列表达式列表>
FROM表名,表名
2.多表的等值连接查询
SELECT[ALL|DISTINCT]<表名.列名>…
FROM表1,表2
WHERE表1.列名=表2.列名
注意:
多表连接时要注意当某列名在两张表中同时存在时,在列名前要加表名以示区分。
3.表自身的连接
SELECT别名.列名,…
FROM表1AS别名1,表1AS别名2
WHERE别名1.列名=别名2.列名
注意:
自身连接时因为是对同一张表操作,为区分开来对该表操作的顺序,需要对表取两个别名,以示区别。
4.IN嵌套子查询
SELECT<目标列表达式列表>
FROM表名
WHERE列名IN
(SELECT字句)
5.EXISTS嵌套子查询
–带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。
●若内层查询结果非空,则返回真值
●若内层查询结果为空,则返回假值。
由EXISTS引出的子查询,其目标列表达式通常都用*,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义
所以,EXISTS子查询中一般是相关自查询,即子查询脱离父查询后不能单独执行。
思考:
如果EXISTS子查询中是不相关子查询,会有什么结果?
五、实验内容
1.多表等值连接查询;
2.外连接查询;
3.IN子查询嵌套;
4.EXISTS嵌套查询。
六、验证性实验
1.多表的连接查询(相当于做笛卡儿乘积)
SELECT*FROMC,SC
2.表的等值连接查询
(1)查询各学生的选课信息(包括学号、课程名、成绩)
因为学号和成绩在SC表中,而课程名在C表中,因此需要多表查询。
SELECTSNO,CNAME,GRADE
FROMC,SC
WHEREC.CNO=SC.CNO
(2)查询学生的选课记录,显示学生的学号、姓名、课程号、成绩。
SELECTS.SNO,SNAME,CNO,GRADE
FROMS,SC
WHERES.SNO=SC.SNO
(3)查询学生的选课记录,显示学生的学号、姓名、课程号、课程名、成绩
SELECTS.SNO,SNAME,SC.CNO,CNAME,GRADE
FROMS,SC,C
WHERES.SNO=SC.SNOANDSC.CNO=C.CNO
3.左外连接查询:
当希望左表(第一张表)中所有记录全部显示出来时,需要用左外连接操作。
INSERTINTOS(SNO,SNAME)VALUES(’20000’,’ZXX’)
SELECTS.SNO,SNAME,CNO,GRADE
FROMS
LEFTOUTERJOINSCONS.SNO=SC.SNO
观察与下面等值连接的执行结果有何不同?
SELECTS.SNO,SNAME,CNO,GRADE
FROMS,SCWHERES.SNO=SC.SNO
4.表自身的连接
(1)查询与‘李勇’同系的学生学号
将学生表S与S本身进行等值连接(系部相等),因为S与S做连接操作时不能区分,所以,对表取一个别名。
然后将第二张表S中名字为‘李勇’的记录选择出就可。
SELECTS1.SNO
FROMSASS1,SASS2
WHERES1.DEPA=S2.DEPAANDS2.SNAME=’李勇’
(2)显示每个学生的非最高分成绩(学生自己的选课成绩中,不是最高分的选课记录显示出来)
SELECTSNO,CNO,GRADEFROMSCASSC1
WHEREGRADE<(SELECTMAX(GRADE)FROMSCASSC2
WHERESC2.SNO=SC1.SNO)
5.IN嵌套子查询
(1)不相关的IN子查询:
子查询可以单独执行,与被嵌套的查询无关。
如,查询与‘李勇’同系的学生学号
可以先查询出‘李勇’所在的系,然后再到S表中查询与上述结果相同的记录。
SELECTSNO
FROMS
WHEREDEPAIN
(SELECTDEPAFROMSWHERESNAME=‘李勇’)
查询‘数据库原理’课程的选课人数
SELECTCOUNT(*)FROMSC
WHERECNOIN
(SELECTCNOFROMCWHERECNAME=‘数据库原理’)
(2)相关的子查询:
子查询中要用到父查询表的信息,子查询不能独立执行。
如,查询选修课程号为“C01”课程且成绩至少高于选修课程号为“C02”的同学的Cno、Sno和GRADE。
在子查询中,因为要查找该同学‘C02’课程的成绩,所以,需要父查询表中该学生的学号信息。
SELECTCNO,SNO,GRADE
FROMSCASSC1
WHERECNO=’C01’ANDGRADE>(
SELECTGRADEFROMSCASSC2
WHERESC2.SNO=SC1.SNOANDSC2.CNO=’C02’)
6.EXISTS嵌套子查询
(1)执行以下语句,观察显示的两个查询结果
SELECTSNO,SNAME
FROMS
WHEREEXISTS
(SELECT*FROMSCWHERECNO=‘C03’)
GO
SELECTSNO,SNAMEFROMS
(2)执行以下语句,观察显示的两个查询结果
INSERTINTOCVALUES(‘C06’,‘数据库安全’,NULL,3)
SELECTSNO,SNAME
FROMS
WHEREEXISTS
(SELECT*FROMSCWHERECNO=‘C06’)
(3)查询‘数据库原理’课程的选课人数
SELECTCOUNT(*)
FROMSC
WHEREEXISTS
(SELECT*FROMC
WHEREC.CNO=SC.CNOANDCNAME=’数据库原理’)
七、设计性实验
1.实验要求
(1)查询“计算机系“学生所教课程的成绩表。
(2)查询成绩比该课程平均成绩低的同学的成绩表。
(3)查询选修“C01”课程的学生学号、课程名、成绩,并要求对查询结果按学号的降序排列,如果学号相同则按成绩的升序排列。
(4)查询选修两门及两门以上课程的学生学号及姓名。
(5)查询年龄在20-22之间的男生的选修的课程号。
(6)查询选修‘数据结构’课程的学生人数。
(7)查询每门选课成绩在80分以上的学生学号、姓名。
2.思考题
(1)多表的连接查询是否都可以转换成嵌套查询?
什么情况下连接查询不能用嵌套查询表示?
(2)多表连接查询和IN嵌套子查询从查询效率上来说,哪种查询的效果更好?
为什么?
实验D004:
数据完整性约束实验
一、实验名称和性质
所属课程
数据库原理
实验名称
数据完整性约束
实验学时
2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验