OCP 1Z0 051 143

143. View the Exhibit and examine the structure of the PROMOTIONS table. 
You have to generate a report that displays the promo name and start date for all promos that started after 
the last promo in the 'internet' category. 
Which query would give you the required output?  
OCP 1Z0 051 143_第1张图片

A. SELECT promo_name, promo_begin_date FROM promotions 
WHERE promo_begin_date > ALL (SELECT MAX(promo_begin_date)       
FROM promotions )AND                               
promo_category = 'internet'; 
B. SELECT promo_name, promo_begin_date FROM promotions 
WHERE promo_begin_date   IN (SELECT promo_begin_date     
FROM promotions     
WHERE promo_category='internet'); 
C. SELECT promo_name, promo_begin_date FROM promotions 
WHERE promo_begin_date   > ALL (SELECT promo_begin_date     
FROM promotions     
WHERE promo_category = 'internet'); 
D. SELECT promo_name, promo_begin_date FROM promotions 
WHERE promo_begin_date > ANY (SELECT promo_begin_date     
FROM promotions     
WHERE promo_category = 'internet'); 

要在'INTERNET'的时间之后。
A 主查询中查'INTERNET'的数据,显然不对。且加上子查询后估计会没数据
SYS >SELECT promo_name, promo_begin_date
  2    FROM sh.promotions
  3   WHERE promo_begin_date > ALL
  4   (SELECT MAX(promo_begin_date) FROM sh.promotions)
  5     AND promo_category = 'internet';

no rows selected


B  用IN,显然关系不对

SQL> SELECT promo_name, promo_begin_date, promo_category
  2    FROM sh.promotions
  3   WHERE promo_begin_date IN
  4         (SELECT promo_begin_date
  5            FROM sh.promotions
  6           WHERE promo_category = 'internet')
  7     AND rownum <= 5;
PROMO_NAME                     PROMO_BEGIN_DATE PROMO_CATEGORY
------------------------------ ---------------- ------------------------------
newspaper promotion #16-108    2000-12-23       newspaper
post promotion #20-232         1998-09-25       post
internet promotion #14-471     2000-02-26       internet
TV promotion #13-448           2000-08-06       TV
internet promotion #25-86      1998-09-20       internet
5 rows selected
Executed in 0.063 seconds


C D promo_category = 'internet' 有多条数据。用> any不对,应该用 > all。这点从字面意思理解即可

SQL> SELECT promo_name, promo_begin_date
  2    FROM sh.promotions
  3   WHERE promo_begin_date > ALL (SELECT promo_begin_date
  4            FROM sh.promotions
  5           WHERE promo_category = 'internet');
PROMO_NAME                     PROMO_BEGIN_DATE
------------------------------ ----------------
radio promotion #31-501        2000-12-30
NO PROMOTION #                 9999-01-01
2 rows selected

SQL> SELECT promo_name, promo_begin_date, promo_category
  2    FROM sh.promotions
  3   WHERE promo_begin_date > ANY (SELECT promo_begin_date
  4            FROM sh.promotions
  5           WHERE promo_category = 'internet')
  6     AND rownum <= 5;
PROMO_NAME                     PROMO_BEGIN_DATE PROMO_CATEGORY
------------------------------ ---------------- ------------------------------
NO PROMOTION #                 9999-01-01       NO PROMOTION
radio promotion #31-501        2000-12-30       radio
flyer promotion #23-162        2000-12-28       flyer
magazine promotion #18-428     2000-12-28       magazine
internet promotion #29-361     2000-12-28       internet
5 rows selected


Answer: C 

你可能感兴趣的:(OCP 1Z0 051 143)