Ткачев О. А. - Основы программирования в СУБД Oracle. SQL+PL/SQL. стр 7.

Шрифт
Фон

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


Оператор 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 department_id IS NULL;



Можно также использовать разновидность данного оператора IS NOT NULL, который возвращает значение FALSE, если значение проверяемого столба будет NULL.


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


SELECT employee_id, first_name, last_name, department_id

FROM Employees

WHERE manager_id IS NOT NULL;

Использование вычисляемых столбцов

В предложении SELECT, кроме списка столбцов таблиц участвующих в запросе, могут присутствовать вычисляемые столбцы, которые представляют собой выражения, состоящие из имен столбцов, констант, функций и арифметических операций. Значению вычисляемого поля можно присвоить имя. Для этого используется следующая конструкция:


{Выражение} As {псевдоним}


При вычислении выражения, содержащего несколько арифметических операций, Oracle выполняет операции с более высоким приоритетом перед выполнением операций с более низким приоритетом.

Сначала выполняются операции умножения и деления, которые имеют одинаковый приоритет, потом сложения и вычитания, которые также относительно друг друга имеют одинаковый приоритет.

Если операции в выражении имеют одинаковый приоритет, то их выполнение производится слева направо.

Рассмотрим примеры использования вычисляемых столбцов. Если значение столбца commission_pct в таблице Employees обозначает надбавку к зарплате как часть заработной платы, то общая зарплата с учетом комиссионных может быть вычислена с использованием выражения:


SALARY * (1 + COMMISSION_pct) As Total_Salary


Следует иметь в виду то, что у некоторых сотрудников значение столбца commission_pct равно NULL. А если один из элементов выражения равен NULL, то и все выражение будет иметь значение NULL. Данную проблему можно решить, используя специальные функции, которые мы рассмотрим позже.


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


SELECT employee_id, first_name, last_name, department_id,

commission_pct*salary as commission

FROM Employees

WHERE commission_pct IS NOT NULL;



Вычисляемые столбцы можно использовать в предложении WHERE.


Пример 2.32. Вывести данные о продажах товаров, в которых сумма одной покупки превышала 300 000


SELECT product_id, order_id, item_id, quantity, unit_price,

quantity*unit_price

FROM Order_items

WHERE quantity*unit_price> 300000;



Использование псевдостолбца ROWNUM


Значение псевдостолбца ROWNUM равно номеру записи, возвращаемой запросом. Используя этот столбец, можно ограничить число строк в результате выполнения запроса.


Пример 2.33. Вывести пять строк с данными о продажах товаров, в которых сумма одной покупки превышала 300 000


SELECT product_id, order_id, item_id, quantity, unit_price,

quantity*unit_price

FROM Order_items

WHERE quantity*unit_price> 300000

AND ROWNUM <=5;



Следует иметь в виду, что любой запрос, содержащий условие ROWNUM = N, где N> 1, будет пуст. Это происходит потому, что первая строка, возвращаемая запросом, имеет значение ROWNUM = 1, это значение не удовлетворяет условию ROWNUM = N и поэтому не попадает в результат выполнения запроса. После этого каждая следующая строка будет иметь значение ROWNUM = 1 и также не будет удовлетворять условию ROWNUM = N.

Оператор конкатенации

Оператор конкатенации (слияния) записывается двумя вертикальными чертами (||) и используются для того, чтобы объединить при выводе данных два или несколько столбцов или литералов в один столбец.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке

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

Если нет возможности читать онлайн, скачайте книгу файлом для электронной книжки и читайте офлайн.

fb2.zip txt txt.zip rtf.zip a4.pdf a6.pdf mobi.prc epub ios.epub fb3