Выбрать главу

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, если в списке есть неопределённое