问答题 【说明】
某论坛的部分关系模式如下:
用户(用户编号,账号,密码,积分,级别)
栏目(栏目编号,父栏目编号,名称,版主,描述)
主题(主题编号,标题,类型,点击率,内容,发布时间,栏目编号,用户编号,附件)
回复主题(回复主题编号,标题,主题编号,内容,发布时间,用户编号,附件)
其中:
(1)用户编号唯一标识一个用户。用户的积分根据其发布的主题信息按积分规则计算。级别的值来自集合{‘高级用户’,‘普通用户’,‘初级用户’},当用户开始注册时,积分为100,级别为初级用户;当用户积分到达1000时,级别为普通用户;当用户积分到达 5000时,级别为高级用户。
(2)栏目编号唯一标识一个栏目。栏目分两级,包括父栏目和子栏目。每个栏目必须有且仅有一个版主,版主是一个用户。
(3)主题编号唯一标识一个主题。类型的值来自集合{‘精华’,‘置顶’,‘普通’}。
(4)回复主题编号唯一识别一个回复主题。一个回复主题对应一个主题,而一个主题可以有多个回复主题。
问答题 【问题1】
请将下列SQL语句的空缺部分补充完整。
(1)假设已经创建好用户关系,现在想增加一个属性“个性签名”,类型为 VARCHAR(60),请给出相关的SQL语句。
____a.____
(2)假设已经创建好用户关系,下面是创建栏目关系的SQL语句,请将空缺部分补充完整。
CREATE TABLE 栏目(
栏目编号 VARCHAR(8) PRIMARY KEY,
父栏目编号VARCHAR (8),
名称VARCHAR(40),
版主 VARCHAR(8) NOT NULL,
描述 VARCHAR(100),
__b.____
__c.____
【正确答案】
【答案解析】(1)(a)ALTER TABLE用户ADD个性签名VARCHAR(60);
(2)(b)FOREIGN KEY(父栏目编号)REFERENCES栏目(栏目编号)
(c)FOREIGN KEY(版主)REFERENCES 用户(用户编号)
问答题 【问题2】
请将下列SQL语句的空缺部分补充完整。
(1)查询标题或内容包含“SQL”的主题标题,按发布时间降序排序。
SELECT DISTINCT标题
FROM主题
____(d)__
____(e)__ ;
(2)查找名称为“数据库技术”的栏目及其子栏目中的精华主题的标题和点击率。
SELECT 标题,点击率
FROM 主题
WHERE 类型="精华"
AND栏目编号 ____(f)____ (SELECT栏目编号
FROM 栏目
WHERE 名称="数据库技术"
____(g)___
SELECT 栏目编号
FROM栏目
WHERE ____(h)____ (SELECT栏目编号
FROM栏目
WHERE 名称="数据库技术"));
【正确答案】
【答案解析】(1)(d) WHERE标题 LIKE ‘%SQL%’ OR内容LIKE ‘%SQL%’
(e)ORDER BY发布时间 DESC
(2)(f)IN
(g)UNION
(h)父栏目编号 IN
问答题 【问题3】
假设所有关系模式已创建,回复主题关系模式的“主题编号”是外键,参照主题关系模式的“主题编号”。现在要删除编号为“T005”的主题及其相关的回复主题,下面是对应的删除语句,这些语句组成一个事务。
DELETE 主题 WHERE主题编号=‘T005’;
DELETE 回复主题 WHERE主题编号=‘T005’;
(1)请问这些删除语句能否完成功能?若不能,请说明为什么? (100字以内)
_____(i)_____
(2)假设现在希望仅通过“DELETE主题WHERE主题编号=‘T005’;”这一条语句就能完成此删除功能,应如何实现? (100字以内)
____(j)____
【正确答案】
【答案解析】(1)(i)不能完成此功能。删除了主题编号为“T005”的主题后,可能会存在该主题的回复主题,违反参照完整性约束。
(2)(j)在创建回复主题关系时指定级联删除,定义主题编号属性的外键约束后加上ON DELETE CASCADE。
或者是在主题关系上定义触发器,当删除主题时,删除其对应的回复主题。
问答题 【问题4】
为了了解每个栏目用户关注的主题,对原创主题创建视图主题view,属性包括主题编号、标题、用户账号、栏目名称、回复数、点击率和发布时间。
CREATE VIEW 主题 view(主题编号,标题,用户账号,栏目名称,回复数,点击率,发布时间)As
SELECT主题.主题编号,标题,账号,名称,回复数,点击率,发布时间
FROM主题,用户,栏目,( ____(k)___
FROM回复主题
______(l)____ )As A
WHERE主题.用户编号=用户.用户编号AND主题.栏目编号=栏目.栏目编号AND
______(m)______
【正确答案】
【答案解析】(k)SELECT主题编号,COUNT(*)回复数或SELECT主题编号,COUNT(*)AS回复数
(1)GROUP BY主题编号
(m)主题.题编号=A.主题编号 试题二分析
本题考查SQL语言的知识。
[问题1]
本题考查的是SQL的数据定义语言,即SQL的DDL,第(1)题为基本表结构的修改,增加一个新的列用“ALTER...ADD...”语句;第(2)题为参照完整性约束,因为栏目关系中的父栏目编号和版主是外键,应该定义参照完整性约束。
[问题2]
本题考查的是SQL的数据操纵语言,即SQL的DML中的SELECT语句。根据要求完成特定的查询要求,第(1)题考查LIKE、ORDER BY关键字的应用方法,第(2)题考查m和UNION关键字的应用方法。
数据查询是数据库的核心操作,SELECT语句是SQL语言中进行查询的语句。该语句提供丰富的功能和灵活的使用方式。SELECT语句的一般格式为:
SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]...
FROM<表名或视图名>[,<表名或视图名>]...
[WHERE<条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2> IASC|DESC]];
SELECT既可以完成简单的单表查询,也可以完成复杂的连接查询和嵌套查询。考生应对SELECT语句非常熟悉,并能灵活的应用该语句进行各种查询。
[问题3]
本题考查的是参照完整性约束,第(1)题给的两个DELETE语句,删除了主题编号为“T005”的主题后,可能会存在该主题的回复主题,违反参照完整性约束。因此SQL语句不能完成想要完成的功能,若这两个语句先后顺序调换过来,则可以完成功能。第 (2)题要求仅用一个DELETE语句就完成该删除要求,数据库提供了一些机制完成这个要求,一个是在定义回复主题关系时指定级联删除,定义主题编号属性的外键约束后加上ON DELETE CASCADE;或者通过触发器机制,在主题关系上定义触发器,当删除主题时,删除其对应的回复主题,通过CREATE TRIGGER...语句完成。
[问题4]
本题考查的是数据库的视图,视图也是数据库中非常重要的概念,考生应该熟悉这个内容。另外,本题考查的还主要是SELECT查询语句的应用方法。