Рубрики

ВОРОТА | GATE-CS-2014- (Set-1) | Вопрос 65

Дана следующая схема:

     employees(emp-id, first-name, last-name, hire-date, dept-id, salary)
     departments(dept-id, dept-name, manager-id, location-id) 

Вы хотите отобразить фамилии и даты найма всех последних сотрудников в соответствующих отделах в идентификаторе местоположения 1700. Вы выполняете следующий запрос:

SQL> SELECT last-name, hire-date
     FROM employees
     WHERE (dept-id, hire-date) IN ( SELECT dept-id, MAX(hire-date)
                                     FROM employees JOIN departments USING(dept-id)
                                     WHERE location-id = 1700
                                     GROUP BY dept-id); 

Каков результат?
(A) Он выполняется, но не дает правильного результата.
(B) Он выполняет и дает правильный результат.
(C) Это генерирует ошибку из-за парного сравнения.
(D) Он генерирует ошибку, потому что предложение GROUP BY не может использоваться с объединениями таблиц в подзапросе

Ответ: (Б)
Объяснение: Данный запрос использует ниже внутренний запрос.

SELECT dept-id, MAX(hire-date)
     FROM employees JOIN departments USING(dept-id)
     WHERE location-id = 1700
     GROUP BY dept-id

Внутренний запрос выдает последнюю максимальную дату найма в каждом отделе, расположенном по адресу с идентификатором 1700.

Внешний запрос просто выбирает все пары внутреннего запроса. Следовательно, запрос дает правильный результат.

SELECT last-name, hire-date
     FROM employees
     WHERE (dept-id, hire-date) IN
     (Inner-Query); 

Тест на этот вопрос

Рекомендуемые посты:

ВОРОТА | GATE-CS-2014- (Set-1) | Вопрос 65

0.00 (0%) 0 votes