itgle.com

请根据如下查询语句,回答问题(d),(e)和(f)。SELECT客户号FROM订单,订单明细WHERE订单明细.订单号=订单.订单号AND产品号='02' AND数量>10;(d) 上述查询语句的功能是什么?请简要回答。(30个字以内)(e) 将上述查询语句转换成对应的关系代数表达式。(f) 上述SQL查询语句是否可以进一步优化?如可以,给出优化后的SQL查询语句。

题目

请根据如下查询语句,回答问题(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);
查询一次订购(或购买)产品号为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);
更多“请根据如下查询语句,回答问题(d),(e)和(f)。 SELECT客户号 FROM订单,订单明细 WHERE订单明细.订单 ”相关问题
  • 第1题:

    有以下SQL语句: SELECT订单号.签订日期,金额FROM订单,职员 WHERE订单.职员号=职员.职员号AND姓名=”王五” 与如上语句功能相同的SQL语句是( )。

    A. SELECT订单号,签订日期,金额FROM订单 WHERE EXISTS(SELECT*FROM职员WHERE姓名=”王五”)

    B. SELECT订单号,签订日期,金额FROM订单WHERE EXISTS(SELECT书FROM职员WHERE职员号=订单.职员号AND姓名=”王五”)

    C. SELECT订单号,签订日期,金额FROM订单 WHERE IN(SELECT职员号FROM职员WHERE姓名=”李二”)

    D. SELECT订单号,签订日期,金额FROM订单WHERE IN(SELECT职员号FROM职员WHERE职员号=订单.职员号AND姓名=”王五”)


    正确答案:B
    谓词EXISTS用来检验在子查询中是否有结果返回,本题中内层查询引用了外层查询的表,所以也是内外层互相关嵌套查询。故排除选项A、C、D的错误之处是在 WHERE和IN之间缺少“职工号”。

  • 第2题:

    有以下SQL语句: SELECT 订单号,签订日期,金额 FROM 订单,职员 WHERE 订单.职员号=职员.职员号 AND 姓名="李二" 与如上语句功能相同的SQL语句是( )。

    A.SELECT 订单号,签订日期,金额 FROM 订单 WHERE EXISTS (SELECT*FROM 职员 WHERE 姓名="李二")

    B.SELECT 订单号,签订日期,金额 FROM 订单 WHERE EXISTS(SELECT*FROM 职员 WHERE 职员号=订单.职员号AND姓名="李二")

    C.SELECT 订单号,签订日期,金额 FRM 订单 WHERE IM (SELECT 职员号 FROM 职员 WHERE 姓名="李二")

    D.SELECT 订单号,签订日期,金额 ROM 订单 WHERE IN(SELECT 职员号FROM 职员 WHERE 职员号=订单.职员号 AND 姓名="李二")


    正确答案:B
    解析:题干中的 SQL 语句的功能是:查询那些姓名为“李二”的职员的订单号,签订日期和金额的信息。4个选项中只有选项B中的查询条件与此等价。

  • 第3题:

    有订单表如下:

    订单(订单号(C,4),客户号(C,4),职员号(C,3),签订日期(D.,金额(N,6,2))

    查询所有金额大于等于平均金额的订单的订单号,正确的SQL语句是( )。

    A.SELECT订单号FROM订单WHERE金额>=(SELECT AVG(金额)FROM订单)

    B.SELECT订单号FROM订单WHERE金额=(SELECT AVG(金额)FROM订单)

    C.SELECT订单号FROM订单WHERE金额>=ALL(SELECT AVG(金额)FROM订单)

    D.SELECT订单号FROM订单WHERE金额=ALL(SELECT AVG(金额)FROM订单)


    正确答案:A
    本题考查嵌套查询,首先被括号括起来的为内层查询,先进行内层查询,查询出订单表中的平均金额。然后再进行外层查询,筛选出金额大于等于平均金额的订单号。由于内层查询中使用了AVG(求平均数),因此不能使用ALL进行限定,故A选项正确。

  • 第4题:

    显示2005年1月1日后签订的订单,显示订单的订单号、客户名以及签订日期。正确的SQL语句是( )。

    A.SELECT 订单号,客户名,签订日期FROM订单JOIN客户 ON 订单.客户号=客户.客户号 WHERE 签订日期>{^2005-1-1}

    B.SELECT 订单号,客户名,签订日期 FROM 订单 JOIN 客户 WHERE 订单.客户号=客户.客户号 AND 签订日期,{^2005-1-1)

    C.SELECT 订单号,客户名,签订日期 FROM 订单,客户 WHERE 订单.客户号=客户.客户号 AND 签订日期<{^2005-1-1}

    D.SELECT订单号,客户名,签订日期 FROM 订单,客户 ON 订单.客户号=客户.客户号 AND 签订日期<{^2005-l-1}


    正确答案:A
    解析:显示2005年1月1日后签定订单,表示方法为:签定日期>{^2005-1-1},故排除选项C和选项D。两个表使用JOIN连接,连接条件使用ON,故选项A为正确答案。

  • 第5题:

    有如下职员表和订单表:职员(职员号(C,3),姓名(C,6),性别(C,2),职务(C,10))订单(订单号(C,4),客户号(C,4),职员号(C,3),签订日期(D),金额(N,6,2))查询职工〝李丽〞签订的订单消息,正确的SQL.语句是( )。

    A.SELECT订单号,客户号,签订日期,金额FROM订单WHERE姓名=〝李丽〞

    B.SELECT订单号,客户号,签订日期,金额FROM职员,订单WHERE姓名=〝李丽〞; AND职员.职员号一订单.职员号

    C.SELECT订单号,客户号,签订日期,金额FROM职员JOIN订单; WHERE职员.职员号=订单.职员号AND姓名=〝李丽〞

    D.SELECT订单号,客户号,签订日期,金额FROM职员,订单ON职员.职员号=订单.职员号AND姓名=〝李丽〞


    正确答案:C
    SQL的基本格式为SELECT-FROM-WHERE,其中SELECT说明要查询的字段,FROM说明要查询的字段来自哪个表或哪些表,WHERE说明查询条件.本题查询“李丽”签订的订单信息,要查询字段包括订单号、客户号、签订日期和金额,WHERE后应该限定职员和订单表中的姓名为“李丽”,由于订单表中并没有姓名这一字段,因此用职员号字段将两表信息相连,AND表示“且”。故本题C为正确选项。