Оценить:
 Рейтинг: 0

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

Год написания книги
2020
<< 1 ... 4 5 6 7 8 9 10 11 12 ... 24 >>
На страницу:
8 из 24
Настройки чтения
Размер шрифта
Высота строк
Поля

Пример 2.20. Получить данные о сотрудниках, имена которых начинаются с букв в диапазоне с A по B (содержит ошибку)

SELECT employee_id, first_name, last_name, department_id

FROM Employees

WHERE first_name BETWEEN ? A ? AND ? B ?;

Но анализ результатов этого запроса показывает, что данные о сотрудниках, чьи имена начинаются на букву B, в результат выполнения запроса не попали, хотя такие сотрудники есть, например Bruce.

Это происходит потому, что значение строки B меньше значения строки Bruce, поэтому данные о сотрудниках, чьи имена начинаются на букву B, в результат выполнения запроса не попали. Эту проблему можно решить, указывая в качестве верхнего диапазона следующую букву.

Пример 2.21. Получить данные о сотрудниках, имена которых начинаются с букв в диапазоне с A по B

SELECT employee_id, first_name, last_name, department_id

FROM Employees

WHERE first_name BETWEEN ? A ? AND ? C ?;

Оператор IN

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

Синтаксис:

{имя столбца} IN {список значений}

Список значений в операторе IN может формироваться в результате выполнения оператора SELECT (подзапроса).

Пример 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
<< 1 ... 4 5 6 7 8 9 10 11 12 ... 24 >>
На страницу:
8 из 24