- •8.1. Основные элементы sql Операторы
- •Типы данных
- •Константы
- •Выражения
- •Встроенные функции
- •Отсутствующие, неподходящие или неизвестные данные
- •8.2. Использование sql для выборки (чтения) данных
- •8.3. Отбор строк из таблиц
- •Сравнение
- •Проверка на принадлежность диапазону значений
- •Проверка на членство во множестве
- •Проверка на соответствие шаблону
- •Проверка на равенство значению null
- •Составные условия поиска
- •Вопросы для самоконтроля
Проверка на членство во множестве
Спомощью этого условия поиска можно узнать, соответствует ли значение данных какому-либо значению из заданного списка (рис. 8.8).
Например, следующий оператор выводит список жителей с заданными номерами:
SELECT * FROM PERSON
WHERE NOM IN (1,3,5,9)
Список жителей, родившихся указанные дни, формируется оператором
SELECT * FROM PERSON
WHERE RDATE IN (‘02/12/55’,’11/11/11’)
С помощью проверки NOT IN можно обнаружить значения данных, не являющиеся членами заданного множества:
SELECT * FROM FLAT
WHERE KCATEGORY NOT IN (‘П’,’К’)
Проверяемое выражение может быть любым допустимым выражением, однако обычно оно представляет собой имя столбца.
Если результатом проверяемого выражения является значение NULL, то проверка возвращает значение NULL.
Все константы в списке проверяемых значений должны быть одного и того же типа, который должен быть совместим с типом проверяемого выражения.
Проверка на соответствие шаблону
Для формирования таблицы результатов, состоящей из строк, в которых значение некоторого текстового столбца (поля) совпадает с заданным текстом, можно использовать простое сравнение. Например, следующий оператор создает таблицу результатов из строк, в которых встречается заданные фамилия имя и отчество жителя:
SELECT * FROM PERSON
WHERE FIO = ‘Иванов Иван Иванович’
Однако, если необходимо получить сведения о всех Ивановых, то следует воспользоваться проверкой на соответствие шаблону (рис. 8.9).
Эта конструкция позволяет определить, соответствует ли значение данных в столбце некоторому шаблону. Шаблон представляет собой строку символов, в которую может входить один или более подстановочных знаков. Эти знаки интерпретируются особым образом.
Подстановочный знак % совпадает с любой последовательностью из нуля или более символов. Например, чтобы получить сведения обо всех Ивановых, нужно воспользоваться шаблоном:
SELECT * FROM PERSON
WHERE FIO LIKE ‘Иванов %’
Ключевое слово LIKE указывает, что необходимо сравнивать содержимое столбца FIO с шаблоном ‘Иванов %’, которому соответствуют все фамилии, начинающиеся словом “Иванов”, в том числе “Ивановский”. Чтобы получить сведения только о мужчинах Ивановых или только о женщинах Ивановых, следует использовать шаблон ‘Иванов %’ или ‘Иванова %’ соответственно.
Подстановочный знак “-” (подчеркивание) совпадает любым отдельным символом. Например, для получения сведений о жителях, проживающих в 1-ом микрорайоне, можно воспользоваться таким шаблоном:
SELECT * FROM PERSON
WHERE ADR LIKE ‘Зеленоград, 1__-%’
Подстановочные знаки можно помещать в любое место шаблона, и в одном шаблоне может содержаться несколько подстановочных знаков.
С помощью конструкции NOT LIKE можно выбирать строки, которые не соответствуют шаблону.
Проверка на соответствие шаблону применима только к столбцам, имеющим строковый тип данных или содержащим дату и время. Если в столбце содержится значение NULL, то результатом проверки будет значение NULL.
Может случиться так, что среди символов, содержащихся в столбце, окажутся в качестве отдельных символов подстановочные знаки:
-
X
Y
Z
…….
AB%CD
…….
…….
A_D%E
…….
В стандарте SQL1 определен способ проверки наличия в строке литер, используемых в качестве подстановочных знаков. Для этого применяются символы пропуска.
Когда в шаблоне встречается символ пропуска, то символ, следующий непосредственно за ним, считается не подстановочным знаком, а обычной литерой, т.е. происходит пропуск символа.
Непосредственно за символом пропуска может следовать либо один из двух подстановочных знаков, либо сам символ пропуска, поскольку он тоже приобретает в шаблоне особое значение.
С
подстановочный
знак
SELECT ADR FROM FLAT
WHERE ADR LIKE ‘%A@_B@%%@@’
символ пропуска