多选题 以下是客户(CUSTOMER)表和客户_订单(CURR_ORDER)表的结构:
CUSTOMER
------------------------------------
CUSTOMER_ID NUMBER(5)
NAME VARCHAR2(25)
CREDIT_LIMIT NUMBER(8, 2)
ACCT_OPEN_DATE DATE
CURR_ORDER
------------------------------------
ORDER_ID NUMBER(5)
CUSTOMER_ID NUMBER(5)
ORDER_DATE DATE
TOTAL NUMBER(8, 2)
以下哪种情况下应该使用子查询来返回所需的结果?
【正确答案】 D
【答案解析】[解析] 这一题比较复杂,该题测试对单行子查询的熟悉程度(在这一题中实际上是寻找最佳的答案)。根据有关WHERE子句中的单行子查询的介绍,可以确定选项D是正确的答案。选项D其查询语句可以如下:
SELECT CUSTOMER_ID, name
FROM CUSTOMER
WHERE CREDIT_LIMIT>
(SELECT CREDIT_LIMIT
FROM CUSTOMER
WHERE CUSTOMER_ID=30450);
因为今天下了订单的全部客户的名字的操作可以使用连接操作来完成,所以选项A可以排除,其查询语句可以如下:
SELECT CUSTOMER_ID, name
FROM CUSTOMER C, CURR_ORDER O
WHERE C.CUSTOMER_ID=O.CUSTOMER_ID
AND O.ORDER_DATE=SYSDATE;
因为确定CUSTOMER_ID为30450的客户今年所下的订单数量的操作根本就不需要子查询,所以选项B同样也可以排除。其查询语句可以如下:
SELECT COUNT(TOTAL)
FROM CURR_ORDER
WHERE CUSTOMER_ID=30450
AND ORDER_DATE>=TRUNC(SYSDATE, "YEAR");
因为确定今年开了账号的所有客户的平均信用限额同样不需要子查询,所以选项C也可以排除。其查询语句可以如下:
SELECT avg(CREDIT_IMIT)
FROM CUSTOMER C, CURR_ORDER O
WHERE C.CUSTOMER_ID=O.CUSTOMER_ID
AND ORDER_DATE>=TRUNC(SYSDATE, "YEAR");