当前位置:文档之家› 3-SQL语句练习题参考答案

3-SQL语句练习题参考答案

标准SQL语言一、选择题1、下面关于SQL标准的叙述中,不正确的是(B )。

A.SQL语言是集数据定义、数据操纵、数据控制功能为一体的语言。

B.SQL语言是一种高度过程化的语言。

C.SQL标准规定数据库是按三级模式结构构建。

D.SQL语言是关系型数据库的标准语言。

E.SQL语言是面向集合的语言。

2、SQL语言中,修改基本表结构的语句是( B )。

A.UPDATE B.ALTER C.DROP D.CREATE3、SQL语言中,删除基本表结构的语句是( C )。

A.DELETE B.ALTER C.DROP D.CREATE4、下面关于“视图”的叙述中,不正确的是( 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 成绩DESC2、Select 课号,课名,班号,学期,周学时×(结束周-开始周+1)As 总学时From 排课,课程Where 排课.课号=课程.课号and 教师号=’2002016’and 学年=20143、Select 学号,姓名,COUNT() AS 选课门数,avg(成绩) as 平均分From 学生,选课Where 学生.学号=选课.学号Group by 学号,姓名4、UPDATE 选课SET 成绩=成绩*1.05WHERE 课号=191854’and 成绩<50 and 成绩IS NOT NULLAnd 学号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 停借否=tureWhere 本年度超期还书次数>56、删除读者号以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(购买日期)=2000Group by 图书品种8、查询图书分类号=‘TP311’的图书借出数量(包括已换的)。

Select count(*) as 借出数量From 借阅,图书,图书品种Where 借阅.书号=图书.书号and 图书.品种号=图书品种.图书品种号and 分类号like ‘TP311%’9、查询书名为《数据库系统教程》,作者为‘施伯乐’的书共有多少本、每本书典藏在哪个馆、是否在馆。

Select 书号, 库房号, 在馆否From 图书 , 图书品种Where 图书.品种号=图书品种.品种号 And 书名=’数据库系统教程’And 第一作者=’施伯乐’10、将到今天(函数GetDate()返回今天日期)为止,有超期未还书(还否=FALSE)的读者设置为停借。

Update 读者Set 停借否=trueWhere 读者号 IN (Select 读者号From 借阅Where 还否=False And 应还书日期< GetDate() )11、查询已借书数量等于其最大借书数的读者的姓名、单位信息。

Select 姓名, 单位From 读者 as DZ1Where 读者号 in ( Select 读者号From 借阅Where 还否=FlaseGroup By 读者号Having Count(*)=(Select 最大借书数From 读者类型Where 读者类型号= DZ1.读者类型号) )。

相关主题