数据库原理实验指导书参考答案.docx
《数据库原理实验指导书参考答案.docx》由会员分享,可在线阅读,更多相关《数据库原理实验指导书参考答案.docx(36页珍藏版)》请在冰点文库上搜索。
数据库原理实验指导书参考答案
《数据库原理与应用》实验指导
/学年第学期
姓名:
______________
学号:
______________
班级:
______________
指导教师:
______________
计算机科学与工程学院
2009
实验一SQLServer使用初步
一、实验目的
1、熟悉SQLServer2000的组成及基本功能。
2、掌握SQLServer2000的登录及注册。
3、掌握SQLServer2000企业管理器的使用方法。
4、熟悉查询分析器的基本使用。
二、实验预习
1、什么是数据库管理系统DBMS?
你所知道的DBMS有哪些?
2、SQLServer2000(2005)的安装步骤?
三、实验内容和要求
1、注册服务器
基本步骤:
(1)打开企业管理器
(2)右击SQLServer组→新建SQLServer注册
(3)添加可用的服务器(实际数据库服务器的名称或IP地址)
(4)选择身份验证模式(选“系统管理员分配给我的登录信息”)
(5)输入正确的登录名和密码
(6)选择SQLServer组(选“在现有的SQLServer组中添加SQLServer”)
(7)完成注册
若注册成功,则显示注册成功的信息。
2、连接SQLServer服务器
(1)右键单击上面注册的数据库服务器,选择连接,建立与数据库服务器的连接。
观察连接后服务器图标的变化;
(2)右键单击选择编辑SQLServer注册属性,观察已注册数据库服务器的属性信息;
(3)右键单击选择删除SQLServer注册。
为保证数据库的安全性,使用完毕自己的数据库后,可采取删除的方式,断开与数据库的连接;
(4)重复注册服务器的步骤,再次建立与数据库的连接;
3、熟悉企业管理器
(1)单击建立的服务器连接,观察服务器的7个项目,写出它们的名称。
通过查看联机帮助,总结7个项目的基本功能。
(2)单击数据库,观察Northwind数据库下的11个项目,写出项目名称,通过联机帮助了解它们的基本功能。
(3)查看Northwind的表项目,单击表,观察表的名称、所有者、类型以及创建日期。
回答:
▪这些表的所有者有哪几种?
▪这些表的类型有哪几种?
▪选择表Employees,在右键菜单中选择打开表->返回所有行,观察表中的数据,说出这些数据的实际含义。
观察其他用户类型的表,你还能说出它们数据的实际含义吗?
(4)查看Northwind的视图项目,单击视图,观察视图的名称、所有者、类型以及创建日期。
选择视图ProductSalesfor1997,同上面观察表中数据的方法一样,观察视图中的数据,说出这些数据的意义。
(5)查看Northwind的用户项目,单击用户。
回答:
▪有哪类用户?
查看它们的属性对话框,它们的角色和权限是否相同?
▪通过联机帮助,写出dbo、Guest用户的区别。
(6)查看Northwind的角色项目,单击角色。
回答:
▪有哪些角色类型?
通过查看联机帮助,写出它们各自的含义和作用。
(7)查看Northwind的安全性项目,单击项目中的登录,观察不同的登录名称、类型、服务器访问、默认数据库,找到你自己的登录名称,右键单击打开属性对话框,观察对话框中的设置,写出登录属性对话框中的设置作用。
4、熟悉查询分析器
(1)打开查询分析器。
基本步骤:
▪单击注册的数据库服务器,确定服务器已经连接;
▪在主菜单“工具”中选择“SQL查询分析器”;
▪在打开的查询分析器窗口中,左侧的对象浏览器为注册的服务器,在工具栏的数据库选择中选择Northwind数据库为当前数据库;右侧窗口为查询窗口。
(2)分别在查询窗口中输入如下查询语句,观察查询结果,写出结果的数据记录个数:
查询语句1:
SELECT*
FROMShippers
ORDERBYCompanyName
结果记录数:
查询语句2:
SELECTFirstName,HomePhone
FROMNorthwind.dbo.Employees
ORDERBYFirstNameASC
结果记录数:
查询语句3:
SELECTROUND((UnitPrice*.9),2)ASDiscountPrice
FROMProducts
WHEREProductID=58
结果记录数:
查询语句4:
SELECTOrderID,
DATEDIFF(dd,ShippedDate,GETDATE())ASDaysSinceShipped
FROMNorthwind.dbo.Orders
WHEREShippedDateISNOTNULL
结果记录数:
查询语句5:
SELECTProductID,ProductName
FROMNorthwind.dbo.Products
WHERECategoryID=1ORCategoryID=4ORCategoryID=5
结果记录数:
四、实验小结
五、评阅成绩
实验预习20%
实验过程20%
实验结果30%
实验报告30%
总成绩
实验二数据定义
一、实验目的
1、掌握SQL数据定义功能:
数据库定义、表的定义、索引定义。
2、掌握利用企业管理器和SQL语句定义表、索引的方法。
二、实验预习
1、SQL中基本表定义语句格式:
2、SQL中修改基本表语句格式:
三、实验内容和要求
1、在企业管理器中,利用菜单操作的方式在各自的数据库中建立如下四个基本表:
(1)供应商表S:
列名
说明
数据类型
约束
SNO
供应商号
CHAR(6)
PRIMARYKEY
SNAME
供应商名
VARCHAR(20)
NOTNULL
STATUS
供应商状态
VARCHAR(50)
CITY
所在城市
VARCHAR(50)
(2)零件表P:
列名
说明
数据类型
约束
PNO
零件号
CHAR(6)
PRIMARYKEY
PNAME
零件名
VARCHAR(20)
NOTNULL
COLOR
颜色
CHAR
(2)
WEIGHT
重量
NUMERIC(9,2)
CHECK(WEIGHT>0ANDWEIGHT<=100)
(3)工程项目表J:
列名
说明
数据类型
约束
JNO
项目号
CHAR(6)
PRIMARYKEY
JNAME
项目名
VARCHAR(20)
NOTNULL
CITY
城市
VARCHAR(50)
(4)供应情况表SPJ:
列名
说明
数据类型
约束
SNO
供应商号
CHAR(6)
NOTNULL
PNO
零件号
CHAR(6)
NOTNULL
JNO
项目号
CHAR(6)
NOTNULL
QTY
供应数量
SMALLINT
DEFAULT100
2、用CREATE语句建立如下三个表,并写出相应的语句。
(1)学生表Student:
列名
说明
数据类型
约束
SNO
学号
CHAR(7)
主码
SNAME
姓名
CHAR(10)
NOTNULL
SSEX
性别
CHAR
(2)
取“男”或“女”
SAGE
年龄
SMALLINT
取值15-45
SDEPT
所在系
VARCHAR(20)
默认“计算机系”
语句:
CREATETABLEStudent(
Snochar(7)PRIMARYKEY,
Snamechar(10)notnull,
Ssexchar
(2)CHECK(Ssex='男'orSsex='女'),
SagesmallintCHECK(Sage>=15andSage<=45),
Sdeptchar(20)DEFAULT'计算机系'
)
(2)课程表Course:
列名
说明
数据类型
约束
CNO
课程号
CHAR(10)
主码
CNAME
课程名
VARCHAR(20)
NOTNULL
CCREDIT
学分
SMALLINT
大于0
SEMSTER
学期
SMALLINT
大于0
PERIOD
学时
SMALLINT
大于0
语句:
CREATETABLECourse(
Cnochar(10)PRIMARYKEY,
Cnamevarchar(20)NOTNULL,
Ccreditsmallintcheck(ccredit>0),
semstersmallintcheck(semster>0),
periodsmallintcheck(period>0)
)
(3)选课表Sc:
列名
说明
数据类型
约束
SNO
学号
CHAR(7)
主码,引用Student的外码
CNO
课程号
CHAR(10)
主码,引用Course的外码
GRADE
成绩
SMALLINT
大于0
语句:
CREATETABLESC(
Snochar(7),
Cnochar(10),
Gradesmallintcheck(grade>=0),
PRIMARYKEY(Sno,Cno),
FOREIGNKEY(Cno)REFERENCESCourse(Cno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno)
)
3、利用SQL语句对表结构进行修改。
(1)为零件表P增加一个规格(GUIGE)列,数据类型为字符,长度50;
AlterTablePAddGUIGEchar(50)
(2)修改课程表Course的CNAME属性列的类型为VARCHAR(30);
AlterTableCourseAlterColumnCNAMEvarchar(30)
(3)为供应情况表SPJ添加参照完整性约束;
SPJ的SNO列参照S表SNO列
AlterTableSPJAddForeignKey(SNO)ReferencesS(SNO)
SPJ的PNO列参照P表PNO列
AlterTableSPJAddForeignKey(PNO)ReferencesP(PNO)
SPJ的JNO列参照J表JNO列
AlterTableSPJAddForeignKey(JNO)ReferencesJ(JNO)
(4)删除零件表P的规格(GUIGE)列
AlterTablePDropColumnGUIGE
4、利用企业管理器向表中添加数据
(1)供应商表S:
SNO
SNAME
STATUS
CITY
S1
精益
20
天津
S2
盛锡
10
北京
继续往表中增加一条记录:
四个字段的数据分别是S1,东方红,30,北京,会出现什么情况?
为什么?
(2)零件表P:
PNO
PNAME
COLOR
WEIGHT
P1
螺母
红
12
P2
螺栓
绿
17
P3
螺丝刀
蓝
105.5
是否能够正常输入三条数据?
如果否,问题出在哪里,为什么?
(3)工程项目表J:
JNO
JNAME
CITY
J1
一汽
北京
J2
半导体厂
南京
J3
常州
第三条记录是否能够正常输入,若否,会出现什么问题,为什么?
(4)供应情况表SPJ:
SN0
PNO
JNO
QTY
S1
P1
J1
200
S1
P1
J3
S2
P2
J4
输入过程中是否会遇到问题,若有,出在哪,为什么?
四、实验小结
五、评阅成绩
实验预习20%
实验过程20%
实验结果30%
实验报告30%
总成绩
实验三数据查询
一、实验目的
1、掌握查询语句的基本组成和使用方法
2、掌握常用查询技巧
二、实验预习
1、SQL中查询语句格式:
2、连接查询有哪些不同的连接方式?
有什么特点。
三、实验内容和要求
1、按照下表中的内容,在企业管理器中为数据库表输入相应的数据。
学生表:
Student
Sno
Sname
Ssex
Sage
Sdept
9512101
李勇
男
19
计算机系
9512103
王敏
女
20
计算机系
9521101
张莉
女
22
信息系
9521102
吴宾
男
21
信息系
9521103
张海
男
20
信息系
9531101
钱小平
女
18
数学系
9531102
王大力
男
19
数学系
课程表:
Course
Cno
Cname
Ccredit
Semster
Period
C01
计算机导论
3
1
3
C02
VB
4
3
4
C03
计算机网络
4
7
4
C04
数据库基础
6
6
4
C05
高等数学
8
1
8
选课表:
SC
Sno
Cno
Grade
9512101
C03
95
9512103
C03
51
9512101
C05
80
9512103
C05
60
9521101
C05
72
9521102
C05
80
9521103
C05
45
9531101
C05
81
9531102
C05
94
9512101
C01
NULL
9531102
C01
NULL
9512101
C02
87
9512101
C04
76
2、完成下列查询
(1)查询全体学生的信息。
select*fromstudent
(2)查询“信息系”学生的学号,姓名和出生年份。
selectSno,Sname,2009-SageasBirthyearfromstudentwhereSdept='信息系'
(3)查询考试不及格的学生的学号。
selectDistinctSnofromSCwhereGrade<60
(4)查询无考试成绩的学生的学号和相应的课程号。
selectSno,CnofromSCwhereGradeisnull
(5)将学生按年龄升序排序。
select*fromstudentorderbySageasc
(6)查询选修了课程的学生的学号和姓名。
SelectSno,SnamefromStudentWhereSnoin(SelectSnoFromSc)
或:
selectdistinctstudent.Sno,Snamefromstudent,SCwherestudent.Sno=SC.Sno
(7)查询年龄在20-23岁之间的学生的姓名,系,年龄。
selectSname,Sage,SdeptfromstudentwhereSagebetween20and23
(8)查询同时选修了“计算机导论”,“高等数学”课程的学生的学号,姓名。
selectstudent.Sno,SnamefromstudentwhereNOTEXISTS(
select*fromcoursewhere
Cnamein('高等数学','计算机导论')ANDNOTEXISTS(select*fromSCwhereSno=student.SnoandCno=course.Cno))
或:
selectstudent.Sno,Snamefromstudent,sc,Coursewherestudent.sno=sc.snoando=oandcname='高等数学'andstudent.snoin(selectsnofromscwherecno=(selectcnofromcoursewherecname='计算机导论'))
或:
selectstudent.Sno,Snamefromstudentwheresnoin(selectsnofromscwherecno=(selectcnofromcoursewherecname='高等数学'))andsnoin(selectsnofromscwherecno=(selectcnofromcoursewherecname='计算机导论'))
(9)查询姓“张”的学生的基本信息。
select*fromstudentwhereSnamelike'张%'
(10)查询“95211”班学生的选课情况,要求输出学号,姓名,课程名,成绩,按照学号升序排序。
selectstudent.Sno,Sname,Cname,Gradefromstudent,SC,coursewherestudent.Sno=SC.Snoandcourse.Cno=SC.Cno
andstudent.Snolike'95211%'orderbystudent.Sno
或:
selectstudent.Sno,Sname,Cname,Gradefromstudent,SC,coursewherestudent.Sno=SC.Snoandcourse.Cno=SC.Cno
andleft(student.sno,5)='95211'orderby1
(11)查询选修了课程的学生的总人数。
selectcount(distinctsno)fromSC
(12)查询选修了“C05”课程的的学生成绩单,要求输出学号,姓名,成绩,结果按班级升序,成绩降序排列。
selectstudent.Sno,Sname,Gradefromstudent,SCwherestudent.Sno=SC.SnoandCno='C05'orderbyleft(student.Sno,5)asc,Gradedesc
(13)统计各门课程的成绩,要求输出课程代号,课程名,平均成绩,选修人数。
(成绩为NULL值的不统计)
selectcourse.Cno,Cname,avg(Grade),count(Sno)fromcourse,Scwherecourse.Cno=SC.CnoandGradeisnotnullgroupbyCourse.Cno,Cname
(14)统计各门课程的不及格人数,要求输出课程代号,课程名,不及格人数。
selectCourse.Cno,Cname,count(Sno)fromSC,CoursewhereSC.Cno=course.Cno
andGrade<60groupbyCourse.Cno,Cname
(15)查询选修平均成绩在75分以上的学生的学号,姓名,所在系。
selectsc.sno,sname,sdeptfromstudent,scwherestudent.sno=sc.snogroupbysc.sno,sname,sdepthavingavg(grade)>75
或:
selectsno,sname,sdeptfromstudentwhereSnoin(SelectSnoFromSCGroupBySnoHavingAvg(Grade)>75)
(16)查询与“王大力”同一个系的学生的基本信息
select*fromstudentwheresdeptin(selectsdeptfromstudentwheresname='王大力')
(17)查询选修平均分高于所有学生平均分的学生的学号,并按学号升序排列。
selectstudent.Snofromstudent,SCwherestudent.Sno=SC.Snogroupbystudent.Snohavingavg(Grade)>(selectAvg(Grade)fromSC)orderbystudent.Snoasc
(18)查询未选修“VB”或“数据库基础”两门课的学生的学号,姓名,系名。
(要求用嵌套查询)
selectsno,sname,sdeptfromstudentwheresnonotin(selectsnofromscwherecnoin(selectcnofromcoursewherecnamein('VB','数据库基础')))
或:
selectsno,sname,sdeptfromStudentwhereexists(
select*fromCoursewherecname='VB'andnotexists(
select*fromSCwheresno=Student.snoandcno=CoandCame!
='数据库基础'))
(19)查询选修了全部课程的学生的学号,姓名,系名。
selectsno,sname,sdeptfromstudent
wherenotexists(select*fromcoursewherenotexists
(select*fromscwheresno=student.snoandcno=o))
或:
selectsno,sname,sdeptfromstudent
wheresnoin(selectsnofromscgroupbysnohavingcount(cno)=(selectcoount(*)fromcourse))
(20)输出“高等数学”课程成绩前三名的学生的学号,姓名,系名
selecttop3student.sno,sname,sdeptfromstudent,sc,coursewherestudent.sno=sc.snoando=oandcname='高等数学'orderbygradedesc
四、实验小结
五、评阅成绩
实验预习20%
实验过程20%
实验结果30%
实验报告30%
总成绩