问答题
阅读以下说明,回答问题1至问题4。
【说明】
某商场客户-商品数据库中各关系模式如下:
客户({{U}}客户号{{/U}},姓名,性别,年龄)
商品({{U}}商品号{{/U}},名称,型号,品牌,单价,库存)
销售({{U}}流水号{{/U}},
问答题
【问题1】
(1)客户关系中的年龄取值在15岁到60岁之间(包含15岁和60岁),增加该约束的SQL语句如下,请将空缺部分补充完整。
ALTER TABLE 客户 ADD CONSTRAINT
CONSTRAINT con_ age CHECK ({{U}} (a) {{/U}})
(2)如下用SQL语句创建的畅销商品视图包含商品号、商品名称、型号、品牌和销售量,该视图中商品的销售量大于等于1000件。请将空缺部分补充完整。
CREATE VIEW 畅销商品{{U}} (b) {{/U}}
AS
SELECT 商品.商品号,名称,型号,品牌,销售量
FROM 商品,(SELECT 商品号,{{U}} (c) {{/U}} As 销售量
FROM 销售
GROUP BY 商品号
HAVING SUM (数量)>=1000) AS 商品销售量
WHERE{{U}} (d) {{/U}};
(3)将视图畅销商品的查询权限赋予销售经理李华,请将空缺部分补充完整。
GRANT{{U}} (e) {{/U}}ON TABLE 畅销商品 TO 李华;
【正确答案】
【答案解析】(a) 年龄>=15 AND 年龄<=60 或 年龄 BETWEEN 15 AND 60 (2)(b) (商品号,商品名称,型号,品牌,销售量) (c)SUM(数量) (d)商品.商品号=商品销售量.商品号 (3)(e) SELECT
问答题
【问题2】
查询购买“新飞”品牌的任-型号“冰箱”的客户姓名及购买日期。实现该查询的SQL语句如下,请将空缺部分补充完整。
SELECT 姓名,日期
FROM{{U}} (f) {{/U}}
WHERE{{U}} (g) {{/U}}AND 商品号{{U}} (h) {{/U}}(
SELECT 商品号 FROM 商品
WHERE 品牌='新飞' AND 名称= '冰箱')
【正确答案】
【答案解析】(f)客户,销售 (注:加商品表错误!) (g)客户.客户号=销售.客户号 (h)IN (注:用=错误!)
问答题
【问题3】
实现销售业务的嵌入式SQL代码段(嵌入C语言)如下,假设销售表的流水号由系统自动生成。请将空缺部分补充完箍。

EXEC SQL BEGIN DECLARE SECTION;
/* 销售:商品号,客户号,数量,日期*/
char pno[6]; char cno [6];
int quantity; char date [10];
EXEC SQL END DECLARE SECTION;

EXEC SQL CONNECT TO DEFAULT;
EXEC SQL SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
EXEC SQL INSERT INTO 销售(商品号,客户号,数量,日期)
VALUES({{U}} (i) {{/U}});
EXEC SQL UPDATE 商品 SET 库存={{U}} (i) {{/U}} WHERE 商品号=:pno;
if(SQLCA.SQLCODE !=0){
printf ("商品%s库存不满足本次购买数量,交易失败!",pno);
EXEC SQL ROLLBACK WORK;
} else{
EXEC SQL{{U}} (k) {{/U}};
}
EXEC SQL DISCONNECT CURRENT;
【正确答案】
【答案解析】(i):pno,:CLIO,:quantity, :date (j)库存-:quantiy (k)COMMIT WORK 或 COMMIT
问答题
【问题4】
对商品表增加最小库存属性;若修改某商品的库存时,使得库存值小于或等于其最小库存值,则向采购表插入一条记录,要求采购的数量是该商品最小库存值的两倍再加上10。下面是完成该功能的SQL语句,请将空缺部分补充完整。
ALTER TABLE 商品 {{U}}(1) {{/U}};
CREATE TRIGGER 采购 -trigger AFTER{{U}} (m) {{/U}}
REFERENCING NEW ROW AS nrow
FOR EACH ROW
WHEN{{U}} (n) {{/U}}
BEGIN
INSERT INTO 采购
VALUES({{U}} (o) {{/U}})
END
【正确答案】
【答案解析】(1)ADD 最小库存 INT (注:INT 处可为INTEGER) (m)UPDATE OF 库存 ON 商品 或 UPDATE ON 商品 (n)nrow.数量<=nrow.最小库存 (o)nrow.商品号,nrow.最小库存*2+10 [分析] 本题考查的是SQL的应用,属于比较传统的题目,与往年比较,今年的考查点增加了嵌入式SQL的内容。 问题1考查SQL中的数据定义语言DDL和数据控制语言DCL。 (1)定义列级上的用户定义完整性约束,要求客户的年龄在15岁~60岁之间,包含15岁和60岁,因此空缺处(a)年龄>=15 AND年龄<=60,在标准SQL中,表示在某范围内取值还可以用关键字BETWEEN…AND…,因此该空缺处也可以填写BETWEEN 15 AND 60。注意在SQL中没有15<=年龄<=60这样的表达方式。 (2)创建视图。定义视图时,视图的属性列或者全部省略或者全部指定。若全部省略,则表示该视图由子查询中SELECT子旬目标列中的诸字段构成,这时要求这些字段是简单的属性名。本题中SELECT子句后的商品.商品号不是简单的属性名,且视图的第二个属性商品名称与SELECT子句后的名称不同,故(b)需要全部指定属性名。(c)处应填写集函数SUM(数量)。(d)处考核连接查询的查询条件,视图应仅包含销售量大于等于1000件的商品信息,故有等值连接条件商品.商品号=商品销售量.商品号。 (3)数据控制语言中的授权语句。GRANT后跟着的授予的操作权限,故此处填SELECT。 问题2考查SQL中的数据操作语言DML。该查询涉及到客户、商品和销售三个表的信息,但由于商品表的查询嵌套在外层查询内,故外层查询只连接查询客户和销售两个表,WHERE 后是连接查询条件。谓词m用来查找属于指定集合的元组,此处不能用来表示。 问题3考查嵌入式SQL。空缺处(i)和(j)考查嵌入式SQL程序中主变量的应用。每执行完一个SQL语句,SQLCA中的SQLCODE给出该语句执行的结果情况。根据程序流程,else表示SQL语句能成功执行的分支,(k) 处应填COMMIT WORK 或COMMIT。 问题4考查SQL中的数据定义语言DDL。 (1)对商品表增加最小库存属性,此时要修改商品表结构,增加一个属性。新增列的语法为ADD<新列名><数据类型>[完整性约束]。此处新列名为最小库存,类型为整数类型INTEGER或INT,题目并未要求定义完整性约束。 (2)当有商品销售时,商品的库存减少。当商品库存小于等于其最小库存时,采购相应的商品,数量为最小库存的两倍加上10。可以通过建立触发器来完成此需求。(m)处填写触发事件,即商品表上或者商品表的库存信息更新时,若满足触发条件,即商品库存小于等于其最小库存,则执行触发动作,即插入采购信息。