logo search
Лабы базы Данных / Базы данных / Введение в модель данных SQL

Примеры запросов с использованием предиката null

На самом деле, в нашей формулировке запроса из примера 14.6 есть одна неточность. Если у некоторого сотрудника номер отдела неизвестен (значение столбца EMP.DEPT_NO у соответствующей строки таблицы сотрудников является неопределенным), то бессмысленно вычислять средний размер зарплаты отдела этого сотрудника и находить размер зарплаты руководителя отдела. Формулировка из примера 14.6 приведет к правильному результату, но это неочевидно.1) Чтобы сделать формулировку более понятной (и, возможно, помочь системе выполнить запрос более эффективно), нужно воспользоваться предикатом IS NOT NULL и переписать запрос следующим образом:

SELECT EMP_NO, EMP_NAME, EMP_SAL

FROM EMP

WHERE DEPT_NO IS NOT NULL AND

EMP_SAL BETWEEN

(SELECT AVG(EMP1.EMP_SAL)

FROM EMP EMP1

WHERE EMP.DEPT_NO = EMP1.DEPT_NO)

AND

(SELECT EMP1.EMP_SAL

FROM EMP EMP1

WHERE EMP1.EMP_NO =

( SELECT DEPT.DEPT_MNG

FROM DEPT

WHERE DEPT.DEPT_NO = EMP.DEPT_NO ) );

Пример 14.7. (html, txt)

SELECT EMP_NO, EMP_NAME

FROM EMP

WHERE DEPT_NO IS NULL;

Пример 14.8. Найти номера и имена служащих, номер отдела которых неизвестен. (html,txt)