问答题 某企业网上销售管理系统的数据库部分关系模式如下所示:
客户(客户号,姓名,性别,地址,邮编)
产品(产品号,名称,库存,单价)
订单(订单号,时间,金额,客户号)
订单明细(订单号,产品号,数量)
关系模式的主要属性及约束如表2-1所示。
表2-1 关系模式的主要属性及约束
关系名
约束
客户
客户号唯一标识一位客户,客户性别取值为“男”或者“女”
产品
产品号唯一标识一个产品
订单
订单号唯一标识一份订单。一份订单必须且仅对应一位客户,一份订单可由一到多条订单明细组成。一位客户可以有多份订单。
订单明细
一条订单明细对应一份订单中的一个产品
客户、产品、订单和订单明细关系及部分数据分别如表2-2、2-3、2-4、2-5所示。
表2-2 客户关系
客户号
姓名
性别
地址
邮编
01
王晓现
南京路2号
200005
02
林俊杰
北京路18号
200010
表2-3 产品关系
产品号
名称
库存
单价
01
产品A
20
298.00
02
产品B
50
168.00
表2-4 订单关系
订单号
时间
金额
客户号
1001
2006.02.03
1268.00
01
1002
2006.02.03
298.00
02
表2-5 订单明细关系
订单号
产品号
数量
1001
01
2
1001
02
4
1002
01
1
问答题 以下是创建部分关系表的SQL语句,请将空缺部分补充完整。
CREATE TABLE 客户(
客户号CHAR(5) NOT NULL UNIQUE
姓名CHAR(30),
性别CHAR(2) __CHECK(VALUE_IN("男","女"))__
地址CHAR(30),
邮编CHAR(6));
CREATE TABLE 订单(
订单号CHAR(4),
时间 CHAR(10),
金额 NUMBER(6,2),
客户号 CHAR(5) NOT NULL,
PRIMARY KEY(订单号),
__FOREIGN_KEY(客户号)_REFERENCES_客户(客户号)__ ;
【正确答案】
【答案解析】(a)NOT NULL UNIQUE
(b)CHECK(VALUE IN("男","女"))
(c)FOREIGN KEY(客户号) REFERENCES 客户(客户号)
问答题 请根据如下查询语句,回答问题(d),(e)和(f)
SELECT 客户号
FROM 订单,订单明细
WHERE 订单明细.订单号=订单.订单号 AND
产品号 = "02’AND
数量>10;
(d)上述查询语句的功能是什么?请简要回答。(30个字以内)
(e)将上述查询语句转换成对应的关系代数表达式。
(f)上述SQL查询语句是否可以进一步优化?如可以,给出优化后的SQL查询语句。
【正确答案】
【答案解析】(d)查询一次订购(或购买)产品号为02的数量大于10的客户号
(e)π客户号(订单?σ 产品号="02"^数量>10 (订单明细))
(f)可以优化。优化的SQL语句为:
SELECT客户号
FROM订单
WHERE订单号IN
(SELECT 订单号
FROM 订单明细
WHERE 产品号 = "02 " AND数量>10)
问答题 可以优化。优化的SQL语句为:
_______SELECT客户号
__________FROM订单
____________WHERE订单号IN
_____________(SELECT_订单号
________________FROM_订单明细
_________________WHERE_产品号_=_"02_"_AND数量>10)
请按题意将下述SQL查询语句的空缺部分补充完整。
按客户购买总额的降序,输出每个客户的客户名和购买总额。
SELECT 客户.客户名, __SUM(金额)AS总额__
FROM 客户,订单
WHERE 客户.客户号=订单.客户号
__GROUP_BY_客户.客户号__
__ORDER_BY_总额_DESC__
【正确答案】
【答案解析】(g)SUM(金额)AS总额
(h)GROUP BY 客户.客户号
(i)ORDER BY 总额 DESC
问答题 用SQL语句完成下述要求。
(1)定义一个描述订单的客户号和对应订单明细中产品号关系的视图,客户产品(客户号,产品号)。
CREATE VIEW 客户产品 AS(
SELECT 客户号,产品号
FROM 订单,订单明细
WHERE 订单明细.订单号=订单.订单号)
(2)借助(1)所定义的视图,查询至少购买了01号客户购买的所有产品的客户号。
SELECT 客户号
FROM 客户产品 客户产品1
WHERE __NOT_EXISTS__
(SELECT*
FROM客户产品 客户产品2
WHERE __客户号="01"_AND_NOT_EXISTS__
(SELECT*
FROM客户产品 客户产品3
WHERE 客户产品1.客户号=客户产品3.客户号AND客户产品2.产品号=客户产品3.产品号 ));
【正确答案】
【答案解析】(1)CREATE VIEW 客户产品 AS(
SELECT 客户号,产品号
FROM 订单,订单明细
WHERE 订单明细.订单号=订单.订单号)
(2)(j)NOT EXISTS
(k)客户号="01" AND NOT EXISTS
(l)客户产品1.客户号=客户产品3.客户号AND客户产品2.产品号=客户产品3.产品号
问答题 当—个订单和对应的订单明细数据入库时,应该减少产晶关系中相应的产品库存,为此应该利用数据库管理系统的什么机制实现此功能?请用100字以内的文字简要说明。
【正确答案】
【答案解析】采用数据库管理系统的触发器机制。对产品关系定义一个触发器,在订单明细中的记录插入或更新之后,该触发器被激活,根据订单明细中订购的产品及数量,减少产品关系中对应产品的库存量。