Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по SQL.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
960 Кб
Скачать

Проверка на присутствие в списке значений (вариант in)

В варианте IN вы можете задать список, среди элементов которого должно (или не должно) находиться значение указанного столбца:

<значение> [NOT] IN ({<значение> [, <значение>] ... | <список выбора>})

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

Найдем из нашего списка всех Юль, Юлиев и Юлиан:xvii

SELECT PR_NAME2 AS "Имя",

PR_NAME3 AS "Отчество",

PR_NAME AS "Фамилия",

PR_BIRTHDAY AS "Дата рождения"

FROM PERSON

WHERE PR_NAME2 IN ('Юлий','Юлия','Юлиана')

Листинг 11. Список Юль, Юлиев и Юлиан

Имя

Отчество

Фамилия

Дата рождения

Юлий

Альбертович

Алексеев

19.09.1974

Юлия

Геннадьевна

Проскурякова

29.09.1974

Юлия

Игоревна

Шатрова

03.04.1958

Юлия

Владимировна

Янышева

Юлия

Дмитриевна

Гаевская

07.01.1959

Юлиана

Валерьевна

Коршунова

02.03.1950

Юлия

Валерьевна

Кудинова

29.05.1981

Юлия

Владимировна

Лаврова

08.10.1949

Юлия

Анатольевна

Луковникова

06.12.1979

Юлия

Владимировна

Мясникова

01.09.1961

Юлия

Витальевна

Оборина

02.10.1984

Тот же самый результат можно было бы получить введя запрос с операторами сравнения:xviii

SELECT PR_NAME2 AS "Имя",

PR_NAME3 AS "Отчество",

PR_NAME AS "Фамилия",

PR_BIRTHDAY AS "Дата рождения"

FROM PERSON

WHERE PR_NAME2 = 'Юлий' OR

PR_NAME2 = 'Юлия' OR

PR_NAME2 = 'Юлиана'

Проверка на пустое значение

Если столбцы ваших таблиц, входящих в условие поиска могут иметь пустое значение, то вам следует проявлять бдительность, задавая проверку их значений на NULL. Всегда следует перед выполнением "нормальных" проверок уточнить, не является ли значение пустым. Мы можем использовать два варианта:

<значение> IS NULL

и

<значение> IS NOT NULL

Еще раз повторю, это действительно может стать источником больших ошибок — перед обычной, нормальной, проверкой проверяйте значения на NULL.

Поиск в строковых столбцах

Для строковых значений используются варианты LIKE, CONTAINING и STARTING WITH. Напомню синтаксис:

...

| <значение> [NOT] LIKE <значение>

| <значение> [NOT] CONTAINING <значение>

| <значение> [NOT] STARTING [WITH] <значение>

...

Вариант like

В варианте LIKE строковое значение должно содержать указанные символы.

В этом варианте можно использовать шаблонные символы: процент (%) означает любое, в том числе и нулевое количество любых символов, знак подчеркивания (_) означает ровно один любой символ. LIKE является чувствительным к регистру, т. е. различает строчные и прописные буквы. На самом деле это неприятное ограничение можно очень легко и безболезненно обойти, применяя для имени столбца, используемого в выражении, функцию UPPER, которая возвращает все буквенные данные в верхнем регистре в любом, допустимом для набора используемых символов, алфавите.

Выберем строки из таблицы PERSON, введя условие, по которому фамилия должна заканчиваться на "ОВ". Для этого перед буквами "ОВ" используем шаблонный символ %.xix

SELECT PR_NAME2 AS "Имя",

PR_NAME3 AS "Отчество",

PR_NAME AS "Фамилия"

FROM PERSON

WHERE PR_NAME LIKE '%ов'

Листинг 12. Выборка людей в варианте LIKE '%в'

Имя

Отчество

Фамилия

Максим

Владимирович

Бычков

Олег

Владимирович

Лядов

Евгений

Андреевнич

Болотов

Олег

Сергеевич

Феофилактов

Явар

Гейдар

Джафаров

Александр

Михайлович

Жданов

Алексей

Викторович

Лобанов

Сергей

Анатольевич

Лубов

Алексей

Олегович

Львов

Станислав

Витальевич

Приданников

Сергей

Анатольевич

Ременников

Эдуард

Владимирович

Седов

Олег

Николаевич

Фролов

Александр

Александрович

Чудинов

Николай

Викторович

Шатров

Руслан

Рафаилович

Амерзянов

Константин

Игоревич

Баталов

Сергей

Валерьевич

Бутаков

Василий

Александрович

Глазов

Дмитрий

Федорович

Глумов

Михаил

Валерьевич

Ермаков

Максим

Владимирович

Захаров

Илья

Борисович

Карманов

Владимир

Николаевич

Карпов

Вячеслав

Валерьевич

Красногоров

Станислав

Евгеньевич

Кузнецов

Олег

Александрович

Куликов

Максим

Николаевич

Кучеров

Владимир

Николаевич

Лобанов

Дмитрий

Алексеевич

Назаров

Дмитрий

Аресентьевич

Наумов

Эдуард

Булатович

Нигаметзянов

Алексей

Викторович

Спешков

Петр

Сергеевич

Теплоухов

Расширим условие поиска, выполним:xx

SELECT PR_NAME2 AS "Имя",

PR_NAME3 AS "Отчество",

PR_NAME AS "Фамилия"

FROM PERSON

WHERE UPPER(PR_NAME) LIKE '%ов%'

Мы добавили еще знак процента в условие: LIKE '%ов%'. То есть не только до, но и после символов "ов" может располагаться любое, в том числе и нулевое, количество любых символов. Теперь мы также получаем и женские фамилии.

Поскольку вариант LIKE является чувствительным к регистру, у вас, казалось бы, должны быть сложности при поиске данных, если вы не следовали моим мудрым советам и не вводили подобные строки в верхнем регистре. На самом деле ничего особенно страшного не произойдет. Даже если данные у вас введены вперемежку и прописными, и строчными буквами, вы можете использовать функцию UPPER, которая переведет все буквы строки в верхний регистр. Повторю — это относится только к символам алфавита, поддерживаемого вашим набором символов для этого столбца. Предыдущий запрос можно записать следующим образом: xxi

SELECT PR_NAME2 AS "Имя",

PR_NAME3 AS "Отчество",

PR_NAME AS "Фамилия"

FROM PERSON

WHERE UPPER(PR_NAME) LIKE '%ов%'

Теперь покажем как воспользоваться знаком подчеркивания (_) . Найдем всех людей у которых “ов” начинается со второго символа:xxii

SELECT PR_NAME2 AS "Имя",

PR_NAME3 AS "Отчество",

PR_NAME AS "Фамилия"

FROM PERSON

WHERE UPPER(PR_NAME) LIKE ‘_ов%'

В результате получим

Листинг 13. Список людей, у которых в фамилии после первого символа следует 'ов' (выборка в варианте LIKE '_ов%')

Имя

Отчество

Фамилия

Вера

Валерьевна

Новикова

Марина

Рафаиловна

Новикова

Ольга

Викторовна

Новосёлова