Продолжаем знакомиться с SQL и в этом разделе нам предстоит узнать еще несколько операторов, с помощью которых можно улучшить поиск необходимой информации. Сегодня это будут операторы IN, BETWEEN, IS NULL. А также, мы познакомимся с шаблонами.
Начнем с оператора IN. В принципе, можно создавать запросы и без него, но он упрощает SQL код и делает его более наглядным. Сразу же рассмотрим пример:
SELECT * FROM tbPeoples WHERE vcName = 'Андрей' OR vcName = 'ИВАН' OR vcName = 'ВАСЯ' OR vcName = 'ШВАРЦ'
В этом запросе мы выбираем все записи, в которых имя равно Андрей, или Иван, или Вася или Шварц. Этот запрос вполне работающий, но представьте, что так надо перечислить 20 или более имен. В этом случае запрос раздуется как земной шар.
Проблему решает оператор IN, который позволяет задать список значений, с которыми нужно производить сравнение. Список задается в скобках через запятую. Вот как этот же запрос будет выглядеть с оператором IN:
SELECT * FROM tbPeoples WHERE vcName in ('Андрей', 'ИВАН', 'ВАСЯ', 'ШВАРЦ')
Такой запрос писать намного проще, и он занимает меньше места. Если внимательно осмотреть два предыдущих запроса, то можно и без моих объяснений понять, что делает оператор IN. В данном случае он выведет все записи, в которых поле имени имеет одно из значений, перечисленных через запятую в скобках. В скобках после оператора IN мы перечисляем через запятую допустимые значения, с которыми необходимо производить сравнение.
Если используется числовое поле, то кавычки надо убрать. Например, следующий запрос выбирает все записи, в которых поле "idPosition" равно одному из следующих значений 1,2,3,4,5:
SELECT * FROM tbPeoples WHERE idPosition in (1, 2, 3, 4, 5)
Вместе с оператором IN и со всеми последующими операторами вы можете смело использовать булевы операторы, например, в следующем запросе мы запрашиваем все строки, кроме перечисленых в операторе IN:
SELECT * FROM tbPeoples WHERE idPosition NOT IN (1, 2, 3, 4, 5)
Этот запрос выбирает все записи, где поле "idPosition" НЕ РАВНО 1, 2, 3, 4, 5. Вот тут уже без булева оператора NOT не обойтись. С его помощью мы изменяем результат сравнения на противоположный.
Числа в скобках могут быть в любом порядке, но я не зря выбрал число, идущие последовательно. Просто хочется плавно перейти к следующему примеру – использование оператора BETWEEN. Смысл этого оператора в том, что он позволяет выбрать все записи, в которых указанное поле содержит значения в определенном диапазоне. Например, вам нужно выбрать все строки, в которых idPosition >=1 и меньше, либо равно 5. Это можно сделать следующим запросом, используя операторы сравнения:
SELECT * FROM tbPeoples WHERE idPosition >= 1 AND idPosition <= 5
Но с помощью BETWEEN все делается намного красивее и элегантнее:
SELECT * FROM tbPeoples WHERE idPosition BETWEEN 1 AND 5
Как видите, оператор BETWEEN также нужен только для удобства и вы можете спокойно обойтись без него. Как вы уже поняли, этот оператор задает диапазон чисел. Вы должны помнить, что конечные точки включаются в результат запроса.
Теперь посмотрим, как можно выбрать данные вне указанного диапазона без использования оператора BETWEEN. Для этого можно использовать один из следующих запросов:
SELECT * FROM tbPeoples WHERE NOT (idPosition >= 1 AND idPosition <= 5)
Или
SELECT * FROM tbPeoples WHERE idPosition < 1 OR idPosition > 5
Какой из вариантов использовать – зависит от личных предпочтений. Но та же задача с помощью BETWEEN решается более элегантно. Для этого необходимо написать NOT BETWEEN, как показано в следующем примере:
SELECT * FROM tbPeoples WHERE idPosition NOT BETWEEN 1 AND 5
Этот оператор можно использовать и со строковыми полями. Например, нужно выбрать все строки, в которых имя начинается с буквы А до В:
SELECT * FROM tbPeoples WHERE vcName BETWEEN 'А' AND 'В'
В результат этого запроса войдут такие имена как Андрей и Борис. Василий в результат не попадет, потому что это имя больше, чем просто буква В.
Переходим к оператору IS, а если быть точнее, то IS NULL и IS NOT NULL потому что IS отдельно не используется. С помощью этого оператора можно проверить значение на нулевое или не нулевое значение. Вспоминаем, что нулевое значение не равно 0 или "" (пустой строке). Нулевое значение NULL это не заполненное поле, где вообще нет никакого значения.
Этот оператор действительно может быть важным. Допустим, что вам нужно выбрать все записи, в которых поле Отчество не заполнено. Это поле может быть не заполнено, и иногда может потребоваться узнать, у каких записей оно содержит нулевое значение:
SELECT * FROM tbPeoples WHERE vcSurName IS NULL
Когда мы заполняли базу данных значениями, то не рассчитали ее на этот оператор, поэтому все поля заполнены и в результат не попадет ни одной строки. С другой стороны, то что в результате мы не получили ни одной строки, говорит о том, что данные вполне корректны и поле отчество у всех записей заполнено.
Чтобы найти все не нулевые значения, используется оператор IS NOT NULL, Например, следующий запрос отображает все записи, в которых заполнено поле для хранения отчества 'vcSurName':
SELECT * FROM tbPeoples WHERE vcSurName is NOT NULL
Благодаря оператору NOT, мы наоборот запрашиваем те строки, в которых поле фамилии не содержит нулевое значение.