【问题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 名称=
'冰箱')
【问题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)处填写触发事件,即商品表上或者商品表的库存信息更新时,若满足触发条件,即商品库存小于等于其最小库存,则执行触发动作,即插入采购信息。