3-SQL语句练习题参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
标准SQL语言
一、选择题
1、下面关于SQL标准的叙述中,不正确的是(B )。
A.SQL语言是集数据定义、数据操纵、数据控制功能为一体的语言。
B.SQL语言是一种高度过程化的语言。
C.SQL标准规定数据库是按三级模式结构构建。
D.SQL语言是关系型数据库的标准语言。
E.SQL语言是面向集合的语言。
2、SQL语言中,修改基本表结构的语句是( B )。
A.UPDATE B.ALTER C.DROP D.CREATE
3、SQL语言中,删除基本表结构的语句是( C )。
A.DELETE B.ALTER C.DROP D.CREATE
4、下面关于“视图”的叙述中,不正确的是( C )。
A.视图是一种“虚表”,它的数据被存放在基本表中。
B.视图提供了逻辑数据独立性。
C.不能通过视图来更新数据库中的数据。
D.视图能提供对数据的安全保护。
5、下面关于SELECT语句的叙述中,不正确的是(C)。
A.SELECT产生的结果是一个集合。
B.HA VING子句必须与GROUP BY子句一起使用。
C.可以省略FROM子句。
D.可以省略WHERE子句。
二、填空题
1、在使用INSERT语句向一个表中插入元组时,“值列表”中值的个数、(顺序)、类型必须与“列名表”保持一致。
2、在向一个表中插入元组时,对于未指定默认值且(不能取空值)的字段必须赋值。
3、向表中插入元组时,主键的值不能取(NULL )值。
4、在使用DELETE语句时,如果不指定(where 条件)就会将整个表的数据删除。
5、视图是从一个或几个基本表或(视图)导出的表,它与基本表不同,是一个虚表。
三、判断题
1、SQL语言是面向集合操作的语言。
√
2、可以通过视图来查询数据,但不能通过视图来更新数据库中的数据。
×
3、在SQL Server数据库系统中,向表中插入元组时,系统自动为具有标识属性的列赋值。
√
4、在SQL Server数据库系统中,向表中插入元组时,对取值类型为timestamp(时间戳)的列不能赋值,系统自动赋值。
√
5、用户对数据作更新操作时,必须有相应权限。
√
6、视图只能从基本表中导出,不能从视图中再导出视图。
×
7、数据库中只存放视图的定义,而不存放视图对应的数据。
√
8、计算列是物理上并不存储在表中的虚拟列。
√
9、计算列不能用作DEFAULT 或FOREIGN KEY 约束定义,也不能与NOT NULL 约束定义一起使用。
√
10、对于每个表只能创建一个标识列。
√
11、ALERT语句添加到表中的新列要么允许空值,要么必须指定默认值。
√
四、计算题
1、现有一教学管理系统,ER模型如下:
逻辑模型如下:
学生(学号,姓名,性别,民族)
教师(教师号,姓名,民族,职称)
课程(课号,课名,课程介绍,课程类型,先导课号)
教学班(课号,班号,学年,学期,限制人数)
排课(教师号,课号,班号,学年,学期,周学时,开始周,结束周)
选课(学号,课号,班号,成绩,未考试原因)
说明:
“周学时”、“开始周”、“结束周”、“限制人数”、学年、学期字段的取值类型为整数型。
“成绩”字段的取值类型为实数型。
其它字段的取值类型为字符型。
选课表存储的数据为本学期的学生选课数据
请用SQL语句做如下操作:
1、查询‘191854’号课的选课学生的“学号”、“成绩”,要求:按成绩降序输出,成绩相同时,按学号升序输出。
2、统计教师号为‘2002016’的教师,在2015年的上课情况。
要求显示的信息内容为:课号,课名,班号,学期,总学时(指的是每门课)
3、统计每名同学在的选课情况。
要求显示的信息为:学号,姓名,选课门数,平均分。
4、把选修‘191854’课,成绩低于60分且成绩不为NULL(空)的学生的成绩提高10%。
5、把学生表中2015级学生的“密码”设置为其学号的后六位数字字符。
提示:函数RIGHT(st, n)的功能是返回字符串st的后n位字符,函数例如:
RIGHT(‘123456789’, 3)=’789’
6、在本数据库中,另有一个“学生成绩单”表,结构如下:
学生成绩单(学号,课号,学年,学期,成绩)。
请将“选课”表中2015年第1学期的学生选课数据,添加到“学生成绩单”表中。
7、删除学生表中2011级的学生,但如果该同学在选课表中还有选课则不能删除。
1、
Select 学号,姓名,成绩
From 学生,选课
Where 学生.学号=选课.学号and 课号=’198114’
Order by 成绩DESC
2、
Select 课号,课名,班号,学期,周学时×(结束周-开始周+1)
As 总学时
From 排课,课程
Where 排课.课号=课程.课号and 教师号=’2002016’and 学年=2014
3、
Select 学号,姓名,COUNT() AS 选课门数,avg(成绩) as 平均分
From 学生,选课
Where 学生.学号=选课.学号
Group by 学号,姓名
4、
UPDATE 选课
SET 成绩=成绩*1.05
WHERE 课号=191854’and 成绩<50 and 成绩IS NOT NULL
And 学号in
(select 学号from 学生where 民族like ‘蒙%’)
5、
UPDATE 学生
SET 密码= RIGHT(学号,63)
WHERE 学号 like ‘2015%’
6、
Insert Into 学生成绩单(学号,课号,学年,学期,成绩)
Select 学号,课号,2015 ,1 ,成绩
From 选课
7、delete from 学生
Where 学号like ‘2011%’and 学号not in
(select distinct 学号
From 选课
学号like ‘2011%’)
2、现有一图书管理系统,ER模型如下:
逻辑模型如下:
中图分类(分类号,分类名称)
图书品种(品种号,分类号,书名,第一作者,出版社,出版日期,单价,数量,购买日期)
馆藏图书(书号,品种号,库房号,架位号,在馆否)
库房(库房号,面积,电话,校区,负责人,)
库位(库房号,架位号)
读者(读者号,姓名,密码,读者类型号,挂失否,停借否,停借日期,本年度超期还书次数)
读者类型(读者类型号,说明,最大借书数,最长借书天数)
借阅(书号,读者号,借书日期,还书日期,还否)
说明:图书.购买年份,图书.价格,读者类型.最大借书数,读者类型.最大借书数的取值类型为数值型;读者.挂失否,读者.挂失否的取值类型为逻辑型;借阅.借书日期,借阅.还书日期的取值类型为日期型;其它取值类型为字符型。
请用SQL语句做如下操作:
1、查询借阅了书名为《数据库原理》的读者信息。
Select 读者.读者号, 姓名
From 借阅, 图书, 图书品种, 读者
Where 借阅.书号=图书.书号and 图书.品种号=图书品种.图书品种号and 借阅.读者号=读者.读者号and 书名like ‘%数据库原理%’
Select *
From 读者
Where 读者号in (Select读者号
From 借阅, 图书, 图书品种
Where 借阅.书号=图书.书号and 图书.品种号=图书品种.图书
品种号and 书名like ‘%数据库原理%’)
2、统计借书数量超过两本的读者数。
Select count(*) as 借书数超过两本的读者数
From 读者
Where 读者号in (select 读者号
From 借阅
Group by 读者号
Having count(书号)>2 )
3、查询目前一本书也没借的读者。
Select *
From 读者
Where 读者号not in (select DISTINCT 读者号From 借阅)
4、读者号=‘20040001’的读者借了书号=‘74012310X-001’的书,请记录此信息。
INSERT INTO 借阅(书号,读者号,借书日期)
VALUES(‘74012310X-001’,‘20040001’,getdate() )
5、将“本年度超期还书次数”大于5次的读者停借。
Update 读者
Set 停借否=ture
Where 本年度超期还书次数>5
6、删除读者号以2000开头,所借图书都已还了的读者。
Delete from 读者
Where 读者号like ‘2000%’and 读者号in
(select DISTINCT 读者号
From 借阅
Where 读者号like ‘2000%’还否=ture)
7、查询图书馆2000年所购买的图书品种,每种的数量、总金额。
Select 品种号,count(*) as 每种的数量, sum(单价) as总金额
From 图书,图书品种
Where 图书.品种号=图书品种.品种号and year(购买日期)=2000
Group by 图书品种
8、查询图书分类号=‘TP311’的图书借出数量(包括已换的)。
Select count(*) as 借出数量
From 借阅,图书,图书品种
Where 借阅.书号=图书.书号and 图书.品种号=图书品种.图书品种号and 分类号like ‘TP311%’
9、查询书名为《数据库系统教程》,作者为‘施伯乐’的书共有多少本、每本书典藏在哪个馆、是否在馆。
Select 书号, 库房号, 在馆否
From 图书 , 图书品种
Where 图书.品种号=图书品种.品种号 And 书名=’数据库系统教程’
And 第一作者=’施伯乐’
10、将到今天(函数GetDate()返回今天日期)为止,有超期未还书(还否=FALSE)的读者设置为停借。
Update 读者
Set 停借否=true
Where 读者号 IN (Select 读者号
From 借阅
Where 还否=False And 应还书日期< GetDate() )
11、查询已借书数量等于其最大借书数的读者的姓名、单位信息。
Select 姓名, 单位
From 读者 as DZ1
Where 读者号 in ( Select 读者号
From 借阅
Where 还否=Flase
Group By 读者号
Having Count(*)=(Select 最大借书数
From 读者类型
Where 读者类型号= DZ1.读者类型号
) )。