|
2011-7-16 答案 CF.
A:仅仅是求最大最小,不是第一和最后。
B:FIRST_VALUE, LAST_VALUE不能用在聚合函数。
C:正确
D:用了正确的分析函数语法,但是此处要求的是聚合函数。在聚合基础上使用分析函数,所有引用列都必须在GROUP BY列表中出现。
E:MIN, MAX在此试图作为分析函数来使用,但未满足上述要求。
F:正确,虽然方法有点曲折。如果你的数据库不支持KEEP可以考虑这种方法。
=======================================
2011-7-23: 外连接
作者:Kim Berg Hansen
难度:中
我创建了这张表并填入数据:
CREATE TABLE plch_employees
(
employee_id INTEGER
, last_name VARCHAR2 (20)
)
/
BEGIN
INSERT INTO plch_employees
VALUES (100, 'Jobs');
INSERT INTO plch_employees
VALUES (200, 'Ellison');
INSERT INTO plch_employees
VALUES (300, 'Gates');
COMMIT;
END;
/
CREATE TABLE plch_bonus
(
employee_id INTEGER
, bonus NUMBER
)
/
BEGIN
INSERT INTO plch_bonus
VALUES (100, 100000);
INSERT INTO plch_bonus
VALUES (200, 200000);
COMMIT;
END;
/
我老板想要一个员工奖金清单。即使没有奖金的员工也要列出来。哪些选项能够产生满足要求的输出:
LAST_NAME BONUS
-------------------- ----------
Jobs 100000
Ellison 200000
Gates
(A)
SELECT e.last_name
, b.bonus
FROM plch_employees e
, plch_bonus b
WHERE b.employee_id = e.employee_id
ORDER BY e.employee_id;
(B)
SELECT e.last_name
, ( SELECT b.bonus
FROM plch_bonus b
WHERE b.employee_id = e.employee_id
) bonus
FROM plch_employees e
ORDER BY e.employee_id;
(C)
SELECT e.last_name
, b.bonus
FROM plch_employees e
, plch_bonus b
WHERE b.employee_id(+) = e.employee_id
AND b.bonus(+) > 0
ORDER BY e.employee_id;
(D)
SELECT e.last_name
, b.bonus
FROM plch_employees e
LEFT OUTER JOIN plch_bonus b
ON b.employee_id = e.employee_id
ORDER BY e.employee_id;
(E)
SELECT e.last_name
, b.bonus
FROM plch_employees e
EXISTS JOIN plch_bonus b
ON b.employee_id = e.employee_id
ORDER BY e.employee_id;
(F)
SELECT e.last_name
, b.bonus
FROM plch_employees e
, plch_bonus b
WHERE b.employee_id(+) = e.employee_id
AND b.bonus > 0
ORDER BY e.employee_id;
(G)
SELECT e.last_name
, b.bonus
FROM plch_employees e
, plch_bonus b
WHERE b.employee_id(+) = e.employee_id
ORDER BY e.employee_id;
(H)
SELECT e.last_name
, b.bonus
FROM plch_employees e
RIGHT OUTER JOIN plch_bonus b
ON b.employee_id = e.employee_id
ORDER BY e.employee_id;
(I)
SELECT e.last_name
, b.bonus
FROM plch_employees e
CROSS JOIN plch_bonus b
WHERE b.employee_id = e.employee_id
ORDER BY e.employee_id;
|
|