以下是创建部分关系表的SQL语句,请将空缺部分补充完整。 CREATE TABLE客户( 客户号 CHAR(5) (a), 姓名 CHAR(30), 性别 CHAR(2) (b), 地址

admin2008-02-15  26

问题 以下是创建部分关系表的SQL语句,请将空缺部分补充完整。
   CREATE TABLE客户(
   客户号 CHAR(5)      (a),
   姓名 CHAR(30),
        性别 CHAR(2)      (b),
        地址 CHAR(30),
        邮编 CHAR(6));
        CREATE TABLE 订单(
        订单号CHAR(4),
        时间  CHAR(10),
        金额  NUMBER(6,2),
        客户号CHAR(5)NOTNULL,
        PRIMARY KEY(订单号),
             (c);
请根据如下查询语句,回答问题(d),(e)和(f)。
   SELECT客户号
   FROM订单,订单明细
   WHERE订单明细.订单号=订单.订单号AND
   产品号=’02’ AND
   数量>10;
   (d) 上述查询语句的功能是什么?请简要回答。(30个字以内)
   (e) 将上述查询语句转换成对应的关系代数表达式。
   (f) 上述SQL查询语句是否可以进一步优化?如可以,给出优化后的SQL查询语句。

选项

答案查询一次订购(或购买)产品号为02的数量大于10的客户号 (e) [*] (f)可以优化。优化的SQL语句为: SELECT客户号 FROM 订单 WHERE 订单号 IN (SELECT 订单号 FROM 订单明细 WHERE产品号=’02’ AND数量>10);

解析 本题考核的知识点包括SQL的查询命令与关系代数表达式的互相转换以及SQL的查询优化。
   SELECT语句的功能是:查询一次订购(或购买)产品号为02的数量大于10的客户号。
   根据关系代数表达式的定义,将上述查询语句转换成对应的关系代数表达式为:
   
该SELECT语句,在进行多表查询时,采用的是相关子查询。由于相关子查询查询时要做连接JOIN,性能不是最优。可以考虑采用不相关子查询,来提高性能。优化的 SQL语句为:
   SELECT客户号
   FROM订单
   WHERE订单号IN
     (SELECT订单号
   FROM订单明细
   WHERE产品号=’02’ AND数量>10);
转载请注明原文地址:https://kaotiyun.com/show/ByUZ777K
0

相关试题推荐
最新回复(0)