5 Doreen Blue 20-MAY-70
Отобран только покупатель № 5, потому что 5 больше, чем 2, 3 и 4.
Использование операторов SQL
Операторы SQL позволяет ограничивать отбираемые строки на основании
совпадения шаблонов в строках, списков значений, диапазона значений
и пустых значений. Операторы SQL перечислены в следующей таблице.
Оператор Описание
LIKE Находит совпадающие шаблоны в строках
IN Проверяет по спискам значений
BETWEEN Проверяет по диапазону значений
IS NULL Проверяет на пустые значения
IS NAN Проверяет на совпадение со специальным значением
NAN, что означает «не число» (впервые появился в
Oracle 10g)
IS INFINITE Проверяет, не равны ли бесконечности значения типов
BINARY_FLOAT и BINARY_DOUBLE (впервые появился в Oracle
10g) "
Кроме того, можно использовать оператор NOT для обращения значений
операторов:
■ N O T LIKE
■ N O T IN
■ N O T BETWEEN
■ IS NO T N U L L
■ IS NO T NAN
■ IS N O T INFINITE
Ниже будут подробнее рассмотрены операторы LIKE, IN и BETWEEN.
Выборка информации из таблиц базы данных 43
Использование оператора LIKE
Оператор LIKE во фразе WHERE можно использовать для того, чтобы
проверить, не удовлетворяет какая-либо из текстовых строк, хранящихся
в текстовых столбцах, заданному вами шаблону. При задании шаблона
можно использовать комбинацию обычных символов и следующих двух
групповых символов:
■ Символ подчеркивания (_) Соответствует одному символу в указанной
позиции
■ Символ процента (%) Соответствует любому количеству символов,
начинающихся с указанной позиции
Например, рассмотрим следующий шаблон:
Символ подчеркивания (_) перед буквой о означает один любой символ
в первой позиции значения столбца, о соответствует букве о, а символ процента
(%) соответствует любым символам, следующим после о. Следующий
запрос использует оператор LIKE для поиска значений в столбце
first_name таблицы customers по шаблону '_о%':
SELECT *
FROM customers
WHERE first_name LIKE ‘.о*';
CUSTOMER ID FIRST NAME LAST NAME DOB PHONE
1 John Brown 01-JAN-65 800-555-1211
5 Doreen Blue 20-MAY-70
Отобрано две записи, так как вторым символом обеих строк John и
Doreen является о.
В следующем примере оператор NOT LIKE используется для получения
набора строк, не выбранных предыдущим запросом:
SELECT *
FROM customers
WHERE first_name NOT LIKE ‘_oV;
CUSTOMER ID FIRST NAME LAST NAME DOB PHONE
2 Cynthia Green 05-FEB-68 800-555-1212
3 Steve White 16-MAR-71 800-555-1213
4 Gail Black 800-555-1214
Если вам необходимо найти сами символы подчёркивания или процента
в строке, вы можете воспользоваться опцией ESCAPE для определения
этих символов. Например, рассмотрим шаблон:
□ '%\%%' ESCAPE 'V
Символ после ESCAPE говорит базе данных, как можно отличить символы,
которые нужно искать, от групповых символов, и в этом примере
44 Глава 2
используется символ обратной косой черты. Первый знак % используется
в качестве группового символа и соответствует любому количеству символов;
второй знак % используется в качестве символа, который нужно найти;
третий знак % используется как групповой символ и соответствует любому
количеству символов. Следующий запрос использует таблицу
promotions, которая содержит сведения о продуктах, продаваемых со скидкой
(вы узнаете больше об этой таблице далее в книге). Запрос использует
оператор LIKE для поиска в столбце name таблицы promotions по шаблону
'%\%%' ESCAPE
□ SELECT name
FROM promotions
WHERE name LIKE ‘*\%%’ ESCAPE ‘\’;
NAME
10% o f f Z F i le s
20% o f f Pop 3
30% o f f Modern Science
20% o f f Tank War
10% o f f Chemistry
20% o f f Cre a t iv e Y e l l
15% o f f My Front Line
Как вы видите, запрос возвращает строки, которые содержат символ
процента.
Использование оператора IN
Вы можете использовать оператор IN во фразе WHERE, чтобы отобрать только
те строки, в которых значение столбца попадает в указанный список.
Следующий запрос использует оператор IN для отбора тех строк таблицы
customers, в которых значение столбца customer_id равно 2, 3 или 5:
□ SELECT *
FROM customers
WHERE customer_id IN (2, 3, 5);
CUST0MER_ID FIRST_NAME LAST_NAME DOB PHONE
Оператор N O T IN возвращает строки, не отобранные оператором IN:
□ SELECT *
FROM customers
WHERE customer_id NOT IN (2, 3, 5);
2 Cynthia
3 Steve
5 Doreen
Green
White
Blue
05-FEB-68
16-MAR-71
20-MAY-70
800-555-1212
800-555-1213
CUST0MER_ID FIRST_NAME LAST_NAME DOB PHONE
1 John
4 G a il
Brown
Black
01-JAN-65 800-555-1211
800-555-1214
Выборка информации из таблиц базы данных 45
Важно помнить, что NOT IN возвращает false, если в списке есть неопределённое