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?
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