数据库原理与应用实验答案.docx
《数据库原理与应用实验答案.docx》由会员分享,可在线阅读,更多相关《数据库原理与应用实验答案.docx(14页珍藏版)》请在冰豆网上搜索。
数据库原理与应用实验答案
数据库原理与应用实验答案
【篇一:
数据库原理与应用实验作业参考答案】
=txt>实验1数据库的建立修改与删除
实验2表结构的建立修改删除及完整性约束条件定义实验3数据查询与更新
(一)规定内容
1.单表查询
usest
--[3_1]查询全体学生的详细记录。
select*fromstudent
--[3_2]查询选修了课程的学生学号。
selectdistinctsnofromsc
--[3_3]将“学生”表中的sno、sname这2列合并为1列snosname输出(不改变表中存储的内容),其余列不变。
selectsno+snamesnosname,ssex,sage,sdept
fromstudent
--[3_4]查询年龄不在20~23岁之间的学生姓名、系别和年龄。
方法1:
selectsname,sdept,sage
fromstudent
wheresagenotbetween20and23;
方法2:
selectsname,sdept,sage
fromstudent
wheresage20orsage23;
--[3_5]查询计算机科学系(cs)、数学系(ma)和信息系(is)学生的姓名和性别。
selectsname,ssex
fromstudent
wheresdeptin(cs,ma,is);
--[3_6]查询所有姓“刘”学生的姓名、学号和性别。
selectsname,sno,ssex
fromstudent
wheresnamelike刘%;
--[3_7]查询名字中第2个字为阳字的学生的姓名和学号。
selectsname,sno
fromstudent
wheresnamelike_阳%;
--[3_8]某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
--查询缺少成绩的学生的学号和相应的课程号。
selectsno,cnofromsc
wheregradeisnull;
--[3_9]查询计算机系年龄在20岁以下的学生姓名。
selectsname
fromstudent
wheresdept=csandsage20;
--[3_10]查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
selectsno,grade
fromsc
wherecno=3
orderbygradedesc;
--[3_11]查询全体学生情况,查询结果按所在系升序排列,同一系中的学生按性别降序排列。
select*
fromstudent
orderbysdept,sagedesc;
--使用集函数
--[3_12]查询学生总人数。
selectcount(*)学生总人数fromstudent;
--[3_13]查询选修了课程的学生人数。
selectcount(distinctsno)选课人数--注:
用distinct以避免重复计算学生人数fromsc;
--[3_14]计算1号课程的最高、最低及平均成绩。
selectmax(grade)1号课程最高分,max(grade)1号课程最低分,
avg(grade)1号课程平均成绩
fromsc
wherecno=1
--[3_15]查询学生200215121选修课程的平均成绩。
selectavg(grade)学生200215121平均成绩
fromsc
wheresno=2002151
21
--[3_16]查询学生200215122选修课程的总学分数。
selectsum(ccredit)学生200215122学分
fromsc,course
whereo=oandsno=200215122;
--使用groupby子句分组
--[3_17]求各个课程号及相应的选课人数。
selectcno课程号,count(sno)选课人数
fromsc
groupbycno;
--使用having短语筛选最终分组结果
--[3_18]查询选修了3门(含3)以上课程的学生学号。
selectsno
fromsc
groupbysno
havingcount(*)=3--也可为:
count(cno)=3
--[3_19]查询有2门以上课程是80分以上的学生的学号及(80分以上的)课程数selectsno学号,count(*)80分以上的课程数
fromsc
wheregrade=80
groupbysnohavingcount(*)=2
2.连接查询
--自然连接
--[3_20]查询每个学生的学号、姓名、课号及成绩。
selectstudent.sno,sname,cno,grade
fromstudent,sc
wherestudent.sno=sc.sno
--左外连接
--[3_21]查询每个学生的学号、姓名、课号及成绩(包括没有选修课程的学生)。
方法1:
selectstudent.sno,sname,cno,grade
fromstudent,sc
wherestudent.sno*=sc.sno
方法2:
selectstudent.sno,sname,cno,grade
fromstudentleftjoinsconstudent.sno=sc.sno
运行结果:
snosnamecnograde
----------------------------
200215121李勇197.0
200215121李勇240.0
200215121李勇393.0
200215122刘晨295.0
200215122刘晨355.0
200215123王敏nullnull
200215124张立nullnull
--[3_22]查询所有学生选修课程的成绩。
包括没有选课的学生。
列出学号、姓名、课号、课名、成绩。
selectstudent.sno,sname,o,cname,grade
fromscjoincourseono=o
rightjoinstudentonstudent.sno=sc.sno
运行结果:
snosnamecnocnamegrade
--------------------------------------------
200215121李勇1数据库97.0
200215121李勇2数学40.0
200215121李勇3信息系统93.0
200215122刘晨2数学95.0
200215122刘晨3信息系统55.0
200215123王敏nullnullnull
200215124张立nullnullnull
--自身连接:
一个表与其自己进行连接,称为表的自身连接
--[3_23]查询每一门课的间接先修课(即先修课的先修课)
selecto课号,second.cpno间接先修课
fromcoursefirst,coursesecond
wherefirst.cpno=o
--复合条件连接
--[3_24]查询选修2号课程且成绩在90分以上的所有学生的学号、姓名。
selectstudent.sno,snamefromstudent,sc
wherestudent.sno=sc.sno/*连接谓词*/
ando=2andsc.grade90/*其他限定条件*/
--多表连接
--[3_25]查询每个学生的学号、姓名、课名及成绩。
selectstudent.sno,sname,cname,grade
fromstudent,sc,course
wherestudent.sno=sc.snoando=o
运行结果:
snosnamecnamegrade
--------------------------------------
200215121李勇数据库97.0
200215121李勇数学40.0
200215121李勇信息系统93.0
200215122刘晨数学95.0
200215122刘晨信息系统55.0
3.嵌套查询
--[3_26]查询与“刘晨”在一个系学习的学生。
--方法1:
不相关子查询(子查询的查询条件不依赖于父查询)
selectsno,sname,sdept
fromstudent
wheresdeptin--当内查询结果最多只有一个值时可用=代替in
(selectsdept
fromstudent
wheresname=刘晨)
--[3_27]查询所有姓名相同的学生。
--方法1:
不相关子查询(子查询的查询条件不依赖于父查询)
select*
fromstudent
wheresnamein
(selectsname
fromstudent
groupbysnamehavingcount(*)1)
orderbysname,sno
--[3_28]查询选修了课程名为“信息系统”的学生学号和姓名。
--方法1:
用嵌套查询(不相关子查询)
selectsno,sname--③最后在sudent关系中取出sno和sname
fromstudent
wheresnoin
(selectsno--②然后在sc中找出选修了“信息系统”所在课号的学生学号fromsc
wherecnoin
(selectcno--①首先在curse关系中找出“信息系统”的课程号fromcourse
wherecname=信息系统))
--[3_29]找出每个学生超过他选修课程平均成绩的学号、课号及成绩。
selectx.*
fromscx
wheregrade=(selectavg(grade)
fromscy
wherey.sno=x.sno)
运行结果:
snocnograde
--------------------
200215121197.0
200215121393.0
200215122295.0
--[3_30]查询其他系中比计算机科学系某一学生年龄小的学生学号、姓名和年龄。
--方法1:
用any谓词
selectsname,sage
fromstudent
wheresageany(selectsage
fromstudent
wheresdept=cs)
andsdeptcs/*注意这是父查询块中的条件*/
--[3_31]查询其他系中比计算机科学系所有学生年龄都小的学生学号、姓名和年龄。
selectsname,sage
fromstudent
wheresageall(selectsage
fromstudent
wheresdept=cs)
andsdeptcs
--[3_32]查询所有选修了1号课程的学生学号、姓名。
selectsno,sname
fromstudent
whereexists
(select*
【篇二:
《数据库原理及应用》实验报告】
实验报告
实验课程:
数据库原理及应用
学号:
2012044543003
学生姓名:
陈洪波
班级:
12通信工程1班2015年4月22日
实验一创建和维护数据库
一、实验目的
(1)掌握在windows平台下安装与配置mysql5.5的方法。
(2)掌握启动服务并登录mysql5.5数据库的方法和步骤。
(3)了解手工配置mysql5.5的方法。
(4)掌握mysql数据库的相关概念。
(5)掌握使用navicat工具和sql语句创建数据库的方法。
(6)掌握使用navicat工具和sql语句删除数据库的方法。
二、实验要求
(1)学生提前准备好实验报告,预习并熟悉实验步骤;
(2)遵守实验室纪律,在规定的时间内完成要求的内容;(3)1~2人为1小组,实验过程中独立操作、相互学习。
三、实验内容及步骤
(1)在windows
平台下安装与配置mysql5.5.36版。
进入到下载页面,没看到5.5.36的版本,就选择了32位的
5.5.43版本的来安装
(2)在服务对话框中,手动启动或者关闭mysql服务。
(3)使用net命令启动或关闭mysql服务。
(4)分别用navicat工具和命令行方式登录mysql。
登录成功的页面截图如下:
②运用行命令方式登录成功的页面如下:
(5)在my.ini文件中将数据库的存储位置改为d:
\mysql\data。
①停止mysql服务
②打开mysql默认的安装文件夹c:
\programfiles\mysql\mysqlserver5.1中的my.ini文件,点击记事本顶
部的“编辑”,“查找”,在查找内容中输入datadir后并点击“查找下一个”转到“pathtothedatabaseroot数据库存储主路径”参数设置,找到datadir=c:
/documentsand
settings/allusers/applicationdata/mysql/mysqlserver5.1/data/即是默认的数据库存储主路径设置,现将它改到d:
\mysql\data即可,正确的设置是datadir=d:
\mysql\data。
③将老的数据库存储主路径中的数据库文件和文件夹复制到新的存储主路径④重新启动mysql服务,这样子数据库的存储路径就完成了。
(6)创建数据库。
①使用navicat创建学生信息管理数据库gradem。
②使用sql语句创建数据库mydb。
语句截图如下:
(7)查看数据库属性。
①在navicat中查看创建后的gradem数据库和mydb数据库的状态,查看数据库所在的文件夹。
②利用showdatabases命令显示当前的所有数据库。
(8)删除数据库。
①使用navicat图形工具删除gradem数据库。
②使用sql语句删除mydb数据库。
③利用showdatabases命令显示当前的所有数据库。
(9
)使用配置向导修改当前密码,并使用新密码重新登录。
(10)配置path变量,确保mysql的相关路径包含在path变量中。
【篇三:
数据库原理及应用(sqlserver2008)全书答案清华大学出版社马建红李占波主编第五章习题及实验答案】
>习题答案
一、选择题
1、a
2、a
3、b
4、b
5、d
6、b
7、a
8、c
二、填空题
1、用该数据库管理系统自带的sqlservermanagementstudio可视化地创建数据表、使用transact-sql语言直接创建数据表
2、droptable
3、default约束、check约束、主键约束、unique约束、外键约束
三、简答题
1、答:
使用createtable语句创建数据表的格式如下:
createtable数据表名字(
字段名称1(对字段的定义部分)
字段名称2(对字段的定义部分)
......
字段名称n(对字段的定义部分)
);
2、答:
不一样。
delete是删除数据表中的所有数据,而drop是删除数据表的结构。
3、答:
insertintotable_or_view_name(column_list)values(expression)
4、答:
域完整性,也可以称为列完整性,指定一个数据集对某一个列是否有效和确定是否允许空值。
域完整性通常是经过使用有效性检查来实现的,还可以通过限制数据类型、格式或者可能的取值范围来实现。
例如,设置员工进入公司的日期大于员工的出生日期,在“性别”列中,限制其取值范围为“男”和“女”,这样就不能在该列输入其他一些无效的值。
最简单的域完整性方法是数据类型,例如,在出生日期列中定义该列的数据类型是datetime,则该列就不会出现其他一些不符合日期格式的数据。
实体完整性,也可以称为行完整性,要求表中的所有行有一个唯一的标识符,这种标识符一般称为主键值。
例如,对于所有的中国公民来说,居民身份证号码是唯一的,使用居民身份证号码可以唯一地确定某一个人,因此可以把公民的居民身份证号码作为主键对待。
主键值是否能够被修改或表中的全部数据是否能够被全部删除都要依赖于主键表和其他表之
间要求的完整性。
对于一个公司来说,可以设置员工编号为主键,避免重复数据出现。
引用完整性保证在主键(在被参考表中)和外键之间的关系总是得到维护。
如果被参考表中的一行被一个外键所参考,那么这一行数据便不能直接被删除,用户也不能直接修改主键值。
例如,在一个数据库中有两个表,即人事表和财务表。
人事表中记录了本单位的所有员工的基本信息,财务表记录了本单位员工的借款信息。
一般地,如果某个公司员工有借款,那么他就不能从人事表中直接删除。
当然,这种引用完整性的限制是有条件的,可以通过设置ondeletecascade和onupdatecascade来改变这种限制。
5、答:
主键约束在表中定义一个主键值,这是唯一确定表中每一行数据的标识符。
在所有的约束类型中,主键约束是最重要的一种约束类型,也是使用最广泛的约束类型。
该约束强制实体完整性。
一个表中最多只能有一个主键,且主键列不允许空值。
主键约束可以在创建表的时候创建,具体transact-sql语句如下:
createtable[数据表名称](
主键属性属性类型constraint主键约束名称primarykeynotnull,......
)
也可以在表创建以后再添加主键约束,具体transact-sql语句如下:
altertable[数据表名称]addconstraint主键约束名称primarykey([主键属性])
实验答案
(1)建立一个名称sales的数据库;该数据库中包含三个表:
customer、product、order
(2)测试三个表的实体完整性,查看在主键值不唯一或为空值时会出现什么提示信息。
(3)创建三个表之间的外键关系(参见本章5.1.1)
(4)在三个表中分别添加一些数据,然后再做删除操作,体会外键引用约束的作用和限制。