数据库技术与应用SQL习题答案.docx
- 文档编号:8986357
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:21
- 大小:22.25KB
数据库技术与应用SQL习题答案.docx
《数据库技术与应用SQL习题答案.docx》由会员分享,可在线阅读,更多相关《数据库技术与应用SQL习题答案.docx(21页珍藏版)》请在冰点文库上搜索。
数据库技术与应用SQL习题答案
实验2 SQLServer数据库的管理
4.启动查询分析器,在查询分析器中使用Transact-SQL语句CREATEDATABASE创建studb数据库。
然后通过系统存储过程sp_helpdb查看系统中的数据库信息
CREATEDATABASEstudb
sp_helpdb
5. 在查询分析器中使用Transact-SQL语句ALTERDATABASE修改studb数据库的设置,指定数据文件大小为5MB,最大文件大小为20MB,自动递增大小文1MB。
ALTERDATABASEstudb
MODIFYFILE
(
NAME=studb,
SIZE=5MB,
MAXSIZE=20MB,
FILEGROWTH=1MB
)
7. 使用企业管理器将studb数据库的名称更改为student_db。
ALTERDATABASEstudb
MODIFYNAME=student_db
8. 使用Transact-SQL语句DROPDATABASE删除student_db数据库。
DROPDATABASEstudent_db
实验3 SQLServer数据表的管理
5. 使用Transact-SQL语句CREATETABLE在studentsdb数据库中创建grade表。
CREATETABLEgrade
(学号char(4),
课程编号char(4),
分数decimal(5)
)
8. 使用Transact_SQL语句INSERTINTO...VALUES向studentsdb数据库的grade表插入以下数据:
学号 课程编号 分数
0004 0001 80
USEstudentsdb
GO
INSERTINTOgrade
VALUES('0004','0001','80')
9. 使用Transact_SQL语句ALTERTABLE修改curriculum表的“课程编号”列,使之为非空。
ALTERTABLEcurriculum
ALTERCOLUMN课程编号char(4)NOTNULL
GO
10.使用Transact_SQL语句ALTERTABLE修改grade表的“分数”列,使其数据类型为real。
ALTERTABLEgrade
ALTERCOLUMN分数real
11.分别使用企业管理器和Transact_SQL语句DELETE删除studentsdb数据库的grade表中学号为'0004'的成绩记录。
DELETEgradeWHERE学号='0004'
13.使用Transact_SQL语句UPDATE修改studentsdb数据库的grade表中学号为'0003'、课程编号为'0005'、分数为90的成绩记录。
UPDATEgradeSET分数=90
WHERE学号='0003'and课程编号='0005'
14. 使用Transact_SQL语句ALTER...ADD为studentsdb数据库的grade表添加一个名为“备注”的数据列,其数据类型为VARCHAR(20)。
ALTERTABLEgradeADD备注VARCHAR(20)NULL
15. 分别使用企业管理器和Transact_SQL语句DROPTABLE删除studentsdb数据库中的grade表。
DROPTABLEgrade
实验4数据查询
1.在studentsdb数据库中,使用下列SQL语句将输出什么?
(1)15
(2)刘卫
张卫
马东
钱达
东方
郭文
肖海
张明
(3)KELLY
(4)kellykellykelly
(5)9.4868329805051381
9.3273790530888157
9.2736184954957039
9.4339811320566032
(6)238
(7)20111010
2. 在studentsdb数据库中使用SELECT语句进行基本查询。
(1)SELECT姓名,学号,姓名,出生日期fromstudent_info
(2)SELECT姓名,家庭住址fromstudent_info
where学号=0002
(3)刘卫平0001
张卫民0002
马东0003
钱达理0004
东方牧0005
3.使用SELECT语句进行条件查询
(1)SELECT学号,分数fromgrade
where分数<'90'and分数>'80'
(2)SELECTavg(分数)fromgrade
where学号=0003
(3)SELECT课程编号,count(课程编号)fromgrade
groupby课程编号
(4)SELECT姓名,出生日期fromstudent_info
orderby出生日期asc
(5)SELECT学号,姓名FROMstudent_infoWHERE姓名LIKE'张%'
4. 嵌套查询
(4)SELECT课程编号,分数FROMgrade
where学号=0001and分数>(SELECTmax(分数)fromgrade
where学号=0002)
5.多表查询
(3)SELECTs.学号,s.姓名,c.课程名称,g.分数
FROMstudent_infos,gradeg,curriculumc
wheres.学号=g.学号ands.性别='男'andc.课程编号=g.课程编号
(4)select学号,max(分数)
fromgrade
groupby学号
(5)SELECTs.学号,姓名,sum(g.分数)FROMstudent_infosleftouterjoin
gradegons.学号=g.学号groupbys.学号,姓名
(6)insertintograde(学号,课程编号,分数)
values('0004','0006','76')
SELECTc.课程编号,课程名称,count(g.学号)FROMcurriculumcrightouterjoin
gradegong.课程编号=c.课程编号groupbyc.课程编号,课程名称
6.使用UNION运算符将student_info表中姓“张”的学生的学号、姓名与curriculum表的课程编号、课程名称返回在一个表中,且列名为u_编号、u_名称,如图1-8所示。
select学号u_编号,姓名u_名称fromstudent_infowhere姓名like'张%'
union
select课程编号,课程名称fromcurriculum
7.数据更新
(4)deletefromtotalgrade
where总成绩=null
实验5 索引和视图
1.分别使用企业管理器和Transact-SQL语句为studentsdb数据库的student_info表格和curriculum表创建主键索引。
ALTERtablestudent_info
ALTERcolumn学号char(4)notnull
go
ALTERtablestudent_infoaddconstraintPK_student_infoprimarykey(学号)
ALTERtablecurriculum
ALTERcolumn课程编号char(4)notnull
go
ALTERtablecurriculumaddconstraintPK_curriculumprimarykey(课程编号)
5..分别使用企业管理器和系统存储过程sp_helpindex查看grade表和student_info表上的索引信息。
usestudentsdb
go
execsp_helpindexgrade
go
usestudentsdb
go
execsp_helpindexstudent_info
go
16.在studentsdb数据库中,使用Transact-SQL语句CREATEVIEW建立一个名为v_stu_c的视图,显示学生的学号、姓名、所学课程的课程编号,并利用视图查询学号为0003的学生情况
createviewv_stu_c
as
selectstudent_info.学号,student_info.姓名,curriculum.课程名称,grade.课程编号
fromstudent_infoinnerjoingradeonstudent_info.学号=grade.学号
innerjoincurriculumongrade.课程编号=curriculum.课程编号
select*
fromv_stu_c
where学号='0003'
17.基于student_info表、curriculum表和grade表,建立一个名为v_stu_g的视图,视图中具有所有学生的学号、姓名、课程名称、分数。
使用视图v_stu_g查询学号为0001的学生的所有课程和成绩
createviewv_stu_g
as
selectstudent_info.学号,student_info.姓名,curriculum.课程名称,grade.分数
fromstudent_infoinnerjoingradeonstudent_info.学号=grade.学号
innerjoincurriculumongrade.课程编号=curriculum.课程编号
select*
fromv_stu_g
where学号='0001'
18.分别使用企业管理器和Transact-SQL语句修改视图v_stu_c,使之显示学号、姓名、每个学生所学课程数目。
alterviewv_stu_c(学号,姓名,课程数目)
asselectstudent_info.学号,student_info.姓名,count(grade.课程编号)as课程数目
fromstudent_info,grade
wherestudent_info.学号=grade.学号
groupbystudent_info.学号,student_info.姓名
21.利用视图v_stu_i为student_info表添加一行数据:
学号为0015、姓名为陈婷、性别为女。
insertintov_stu_info
values('0015','陈婷','女')
22.利用视图v_stu_i删除学号为0015的学生记录。
deletefromv_stu_info
where学号='0015'
23.利用视图v_stu_g修改姓名为刘卫平的学生的高等数学的分数为84。
updatev_stu_g
set分数=84
where姓名='刘卫平'and课程名称='高等数学'
24.使用Transact-SQL语句DROPVIEW删除视图v_stu_c和v_stu_g。
dropviewv_stu_c,v_stu_g
实验6 数据完整性
1.为sutdentsdb数据库创建一个规则,限制所输入的数据为7位0-9的数字。
(1)SELECT*INTOstu_phoneFROMstudent_info
ALTERTABLEstu_phoneADD电话号码CHAR(7)NULL
(2)CREATERULEphone_rule
AS
@phoneLIKE'[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
(3)sp_bindrulephone_rule,'stu_phone.电话号码'
(4)出错原因:
与该列所绑定的规则发生冲突;
需要修改:
改’1234yyyy’为’1234567’
phone_rule规则不能对其他操作(如DELETE)进行规则检查
3.创建一个规则stusex_rule,将其绑定到stu_phone表的“性别”列上,保证输入的性别值只能是“男”或“女”。
CREATERULEstusex_rule
AS@sexin('男','女')
sp_bindrulestusex_rule,'stu_phone.性别'
4.使用系统存储过程sp_help查询stusex_rule规则列表,使用sp_helptext查询stusex_rule规则的文本,使用sp_rename将stusex_rule规则更名为stu_s_rule。
sp_helpstusex_rule
sp_helptextstusex_rule
sp_renamestusex_rule,stu_s_rule
5.删除stu_s_rule规则。
Sp_unbindrule'stu_phone.性别'
DROPRULEstu_s_rule
6.在stuedentdb数据库中,建立日期、货币和字符等数据类型的默认对象。
(1)CREATEDEFAULTdf_date
AS'2006-4-12'
GO
CREATEDEFAULTdf_char
AS'unknown'
GO
CREATEDEFAULTdf_money
AS$100
GO
(2)CREATETABLEstu_fee
(学号char(10)NOTNULL,
姓名char(8)NOTNULL,
学费money,
交费日期datetime,
电话号码char(7))
(3)Sp_bindefaultdf_money,'stu_fee.学费'
GO
Sp_bindefaultdf_date,'stu_fee.交费日期'
GO
Sp_bindefaultdf_char,'stu_fee.电话号码'
GO
(4)INSERTINTOstu_fee(学号,姓名)values('0001','刘卫平')
INSERTINTOstu_fee(学号,姓名,学费)values('0001','张卫民',$120)
INSERTINTOstu_fee(学号,姓名,学费,交费日期)
VALUES('0001','马东',$110,'2006-5-12')
(5)sp_unbindefault'stu_fee.电话号码'
DROPDEFAULTdf_char
GO
sp_unbindefault'stu_fee.交费日期'
DROPDEFAULTdf_date
GO
sp_unbindefault'stu_fee.学费'
DROPDEFAULTdf_money
GO
8.为student_info表添加一列,命名为“院系”,创建一个默认对象stu_d_df,将其绑定到student_info表的“院系”列上,时期默认值为“信息院”,对student_info表进行插入操作,操作完成后,删除该默认对象。
分别使用企业管理器和查询分析器实现。
ALTERTABLEstudent_infoADD院系CHAR(12)NULL
CREATEDEFAULTstu_d_df
AS'信息院'
sp_bindefaultstu_d_df,'student_info.院系'
INSERTstudent_info(学号,姓名,院系)values('0001','刘卫平','土木工程')
sp_unbindefault'student_info.院系'
DROPDEFAULTstu_d_df
9.在studentsdb数据库中用CREATETABLE语句创建表stu_con,并同时创建约束。
(1)CREATETABLEstu_con
(学号char(4)
CONSTRAINTpk_sidPRIMARYKEY(学号),
姓名char(8)
CONSTRAINTuk_nameUNIQUE,
性别char
(2)
CONSTRAINTdf_sexDEFAULT'男',
出生日期datetime
CONSTRAINTck_bedayCHECK(出生日期>'1988-1-1'),
家庭住址varchar(50))
(2)INSERTstu_con(学号,姓名,出生日期)VALUES('0009','张小东','1989-4-6')
INSERTstu_con(学号,姓名,性别,出生日期)VALUES('0010','李梅','女','1983-8-5')
INSERTstu_con(学号,姓名,出生日期)VALUES('0011','王强','1988-9-10')
INSERTstu_con(学号,姓名,出生日期)VALUES('0012','王强','1989-6-3')
结果分析:
第一、三条命令顺利执行,第二、四条命令不能执行。
第二行语句INSERT语句与COLUMNCHECK约束'ck_beday'冲突。
该冲突发生于数据库'studentsdb',表'stu_con',column'出生日期'。
第四条语句违反了UNIQUEKEY约束'uk_name'。
不能在对象'stu_con'中插入重复键。
(3)ALTERTABLEstu_con
DROPCONSTRAINTpk_sid,uk_name,df_sex,ck_beday
11.在查询分析器中,为studentsdb数据库的grade表添加外键约束(FOREIGNKEY),要求将“学号”设置为外键,参照表为student_info,外键名为ufk_sid。
使用系统存储过程sp_help查看grade表的外键信息。
ALTERTABLEstudent_info
ADDPRIMARYKEY(学号)
GO
ALTERTABLEgrade
ADDCONSTRAINTufk_sidFOREIGNKEY(学号)REFERENCESstudent_info(学号)
GO
sp_helpgrade
在grade表中插入表1-2所示记录,观察SQLServer会做何处理,为什么?
如何解决所产生的问题?
答:
学号0100显示为100;课程编号0001显示为1.
ALTERTABLEgrade
DROPCONSTRAINTufk_sid
实验7 Transact-SQL程序设计
1.结果显示:
张明华
显示的仅为第二个姓张的记录
2.DECLARE@grademaxint,@grademinint,@gradesumint
SELECT@grademax=max(分数),@grademin=min(分数),@gradesum=sum(分数)
FROMgrade
SELECT@grademax,@grademin,@gradesum
3.DECLARE@rowint
SET@row=(SELECTCOUNT(*)FROMgrade)
SELECT@row
4.DECLARE@intCIdint,@intErrorCodeint
INSERTINTOcurriculum(课程编号,课程名称,学分)
VALUES('0006','VB程序设计',2)
SELECT@intCId=@@identity,@intErrorCode=@@error
SELECT@intCId,@intErrorCode
第一次显示:
NULL0
第二次显示:
NULL0
curriculum表中数据的变化:
第一次:
0006VB程序设计2
第二次:
0006VB程序设计2
5.在studentsdb数据库的student info表中,以“性别”为分组条件,分别统计男生和女生人数。
SELECTCOUNT('性别')FROMstudent_info
GROUPBY性别
6.在grade表中,使用适当函数找出“高等数学”课程的最高分、最低分和平均分。
SELECTMAX(分数)AS最高分,MIN(分数)AS最低分,AVG(分数)AS平均分
FROMgrade
WHERE课程编号=(SELECT课程编号FROMcurriculum
WHERE课程名称='高等数学')
7.定义一个datetime型局部变量@student,以存储当前日期。
计算student info表
中的学生的年龄,并显示学生的姓名、年龄。
在以下代码的划线部分填入适当内容,以实现上述功能。
DECLARE@studentdatetime
SET@student=getdate()
SELECT姓名,year(@student)-year(出生日期)AS年龄
FROMstudent_info
8.运行代码,写出运行结果。
运行结果为:
8233225
9.在局部变量@stu id中存储了学号值。
编写代码查询学号为0001的学生的各科平
均成绩,如果平均分>=60则显示“你的成绩及格了,恭喜你!
!
”,否则显示“你的成绩不及格”。
IF((SELECTAVG(分数)FROMgradewhere学号='0001')<60)
PRINT'你的成绩不及格'
ELSE
PRINT'你的成绩及格了,恭喜你!
!
'
10.运行代码段,写出运行的结果。
@counter的值现在为:
1
@counter的值现在为:
2
@counter的值现在为:
3
@counter的值现在为:
4
@counter的值现在为:
5
@counter的值现在为:
6
@counter的值现在为:
7
@counter的值现在为:
8
@counter的值现在为:
9
11. 查询grade表。
如果分数大于等于90,显示A;如果分数大于等于80小于90,显
示B;如果分数大于等于70小于80,显示C;如果分数大于等于60小于70,显示D;其他显示E。
在以下代码的划线部分填入适当内容完成上述功能。
SELECT学号,分数,等级=
CASE
WHEN分数>=90THEN'A'
WHEN分数>=80AND分数<90THEN'B'
WHEN分数>=70AND分数<80THEN'C'
WHEN分数>=60AND分数<70THEN'D'
ELSE'E'
END
FROMgrade
12.计算grade表的分数列的平均值。
如果小于80,则分数增加其值的5%;如果分数
的最高值超过95,则终止该操作。
在以下代码划线处填入适当的内容以完成上述功能。
WHILE(SELECTAVG(分数)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库技术 应用 SQL 习题 答案
![提示](https://static.bingdoc.com/images/bang_tan.gif)