2.2.      Операторы IN, BETWEEN, LIKE, is NULL

При задании логического условия в предложении WHERE мо­гут быть использованы операторы IN, BETWEEN, LIKE, is NULL.

Операторы IN (равен любому из списка) и NOT IN (не ра­вен ни одному из списка) используются для сравнения прове­ряемого значения поля с заданным списком. Этот список зна­чений указывается в скобках справа от оператора IN.

Построенный с использованием IN предикат (условие) счи­тается истинным, если значение поля, имя которого указано сле­ва от IN, совпадает (подразумевается точное совпадение) с од­ним из значений, перечисленных в списке, указанном в скобках справа от IN.

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

Примеры

Получить из таблицы EXAM_MARKS сведения о студентах, имеющих экзаменационные оценки только 4 и 5.

SELECT *

FROM EXAM_MARKS WHERE MARK Ш (4, 5 ) ;

Получить сведения о студентах, не имеющих ни одной экза­менационной оценки, равной 4 и 5.

SELECT *

FROM EXAM_MARKS

WHERE MARK NOT TN  (4, 5 ) ;

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

Например, запрос на вывод записей о предметах, на изуче­ние которых отводится количество часов, находящееся в пре­делах между 30 и 40, имеет вид:

SELECT *

FROM SUBJECT

WHERE HOUR BETWEEN 3(1 AND 4(1;

Граничные значения, в данном случае значения 30 и 40, входят во множество значений, с которыми производится срав­нение. Оператор BETWEEN может использоваться какдля число­вых, так и для символьных типов полей.

Оператор LIKE применим только к символьным полям ти­па CHAR или VARCHAR (см. раздел 1.5 «Типы данных SQL»).

2. Выборка данных (оператор ЯН РГТП

Этот оператор просматривает строковые значения полей с це­лью определения, входит ли заданная в операторе LIKE под­строка (образец поиска) в символьную строку-значение прове­ряемого поля.

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

* символ подчеркивания «_», указанный в шаблоне, определя­ет возможность наличия в указанном месте одного любого символа;

• символ «%•> допускает присутствие в указанном месте прове­ряемой строки последовательности любых символов про­извольной длины.

Пример

Написать запрос, выбирающий из таблицы STUDENT сведе­ния о студентах, фамилии которых начинаются на букву «Р».

SEbECT *

FROM STUDENT

WHERE   SURNAME   LIKE   'E%' ;

В случае необходимости включения в образец самих симво­лов «_•> и «%» применяют так называемые escape-символы. Если escape-символ предшествует знаку «_» и «%», то эти знаки будут восприниматься буквально. Например, можно задать образец поиска с помощью следующего выражения:

LIKE '_\_Р ESCAPE 'V.

В этом выражении символ "V с помощью ключевого слова ESCAPE объявляется escape-символом. Первый символ «_» в задан­ном шаблоне поиска '_\_Р' будет соответствовать, как и ранее, любому символу в проверяемой строке. Однако второй символ «_», следующий после символа 'V, объявленного escape-симво­лом, уже будет интерпретироваться буквально как обычный символ, также как и символ 'Р' в заданном шаблоне.

Обращаем внимание на то, что рассмотренные выше опера­торы сравнения «=, <, >, <=, >=, <>» и операторы IN, BETWEEN и LIKE ни в коем случае нельзя использовать для проверки содержимого поля на наличие в нем пустого значения NULL (см. раздел 1.5 «Типы данных SQL»). Для этих целей пред­назначены специальные операторы is NULL (является пустым) и IS NOT NULL (является не пустым).

Упражнения

V Напишите запрос на вывод находящихся в таблице EXAM_MARKS номеров предметов обучения, экзамены по которым сдавались ме­жду 10 и 20 января 1ОД9 года.

2. Напишите запрос, выбирающий данные обо всех предметах обуче­ния, экзамены по которым сданы студентами, имеющими иденти­фикаторы 12 и 32.

3. Напишите запрос на вывод названий предметов обучения, начина­ющихся на букву «И».

4. Напишите запрос, выбирающий сведения о студентах, у которых имена начинаются на буквы «И» или «С».

5. Напишите запрос для выбора из таблицы EXAM MARKS записей, в которых отсутствуют значения оценок (поле MARK).

6. Напишите запрос на вывод из таблицы EXAM_MARKS записей, име-

ющих в поле MARK значения оценок.