О. А. Ткачев

Основы программирования в СУБД Oracle. SQL+PL/SQL.


Скачать книгу

2.22. Вывести данные о сотрудниках, которые работают в отделах с определенными номерами

      SELECT employee_id, first_name, last_name, department_id

      FROM Employees

      WHERE department_id IN (40, 10, 110);

      Пример 2.23. Вывести данные о договорах, заключенных в определенные даты

      SELECT * FROM Orders

      WHERE order_date IN (′ 07.09.19 ′, ′ 14.09.19 ′, ′ 02.11.19 ′);

      Оператор IN можно использовать вместе с логическим оператором NOT. В этом случае результат запроса будет содержать строки, в которых значение проверяемого столбца не совпадает ни с одним из значений, указанных в списке.

      Пример 2.24. Вывести данные о сотрудниках, которые не работают в отделах с определенными номерами

      SELECT employee_id, first_name, last_name, department_id

      FROM Employees

      WHERE department_id NOT IN (40, 10, 110);

      Условия выбора, формируемые оператором IN, можно объединять с другими условиями выбора.

      Пример 2.25. Вывести названия городов, которые расположены в США или Канаде и почтовый индекс которых заканчивается цифрой 2

      SELECT city FROM Locations

      WHERE (country_id IN (′ US ′, ′ CA ′))

      AND (postal_code LIKE ′ %2 ′);

      Следует иметь в виду, что если список значений в IN будет содержать NULL, то результат выполнения оператора не будет содержать строк, у которых проверяемый столбец имеет значение NULL, так как результат сравнения NULL имеет значение НЕ ОПРЕДЕЛЕНО (UNKNOWN).

      Пример 2.26. Вывести данные о сотрудниках, которые работают в отделах с определенными номерами, и о сотрудниках, у которых не задан номер отдела

      SELECT employee_id, first_name, last_name, department_id

      FROM Employees

      WHERE department_id IN (40, 10, 110, NULL);

      При этом в таблице Employees есть строки, у которых столбец department имеет значение NULL (см. результаты выполнения запроса из примера 2.29).

      Если список значений в NOT IN будет содержать NULL, то результат выполнения оператора SELECT будет пуст. Это происходит, потому что оператор

      X NOT IN (A1, A2, AN)

      эквивалентен выражению

      X <> A1 AND X <> A2 AND …X <> AN

      Если одно из Ai будет NULL, то результат этого выражения будет иметь значение НЕ ОПРЕДЕЛЕНО (UNKNOWN).

      Пример 2.27. Вывести данные о сотрудниках, которые не работают в отделах с определенными номерами

      SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME,

      DEPARTMENT_ID

      FROM EMPLOYEES

      WHERE DEPARTMENT_ID NOT IN (30,50,60,80,90,100,NULL);

      Результат выполнения этого запроса не будет содержать строк.

      Оператор IS NULL

      Оператор IS NULL используется для определения строк с неопределенным значением заданного столбца.

      Синтаксис:

      {имя столбца} IS NULL

      Данное выражение принимает значение TRUE, если значение проверяемого столба будет NULL.

      Пример 2.28. Получить данные о сотрудниках, для которых неизвестен номер руководителя

      SELECT employee_id, first_name, last_name, department_id

      FROM Employees

      WHERE manager_id IS NULL;

      Пример 2.29. Вывести данные о сотрудниках, у которых не задан номер отдела

      SELECT employee_id, first_name, last_name, department_id

      FROM Employees

      WHERE