Следует отметить, что использование BETWEEN разумно только для данных числовых типов и для данных типа DATE, что естественно, так как мы можем найти числа в заданном интервале и даты в заданном интервале, а вот со строкам и текстом это сделать затруднительно.
Также важное замечание: обратите внимание, что BETWEEN позволяет выбрать данные, принадлежащие и равные нижней и верхней границам заданного интервала.
Вопросы учеников
Оператор BETWEEN на что-то похож, можно ли обойтись без него?
Оператор BETWEEN создан для удобства, и, разумеется, его можно заменить несколькими логическими выражениям, и вот пример.
Пример:
Выбираем города CITY * с населением (PEOPLES) от 300 000 до 1 000 000.
Не будем использовать BEETWEEN.
Можно ли в запросе использовать несколько BETWEEN, объединенных логическими операндами?
Да, разумеется, такой запрос можно написать. Выберем из таблицы MAN людей с возрастом в интервалах от 20 до 30 и от 35 до 39 лет.
Вы говорили, что BETWEEN также можно использовать и в операторах модификации данных?
Да, как и все другие операторы, используемые для выбора строк в WHERE.
Примеры
Обновим дату создания авто на 01.01.2014 для автомобилей с датой создания в интервале от 01.01.2011 до 01.01.2014.
DELETE MAN WHERE YEAROLD BETWEEN 7 AND 16
Удаление всей информации о людях, которым от 7 до 16 лет. Обратите внимание: возраст 7 и 16 входит в заданный интервал и эта информация также будет удалена.
Контрольные вопросы и задания для самостоятельного выполнения
1. Как можно заменить оператор BETWEEN и обойтись без него, чтобы запрос возвращал правильные данные?
2. Выберите города с населением от 40 000 до 2 000 000 человек, напишите SQL-запрос.
3. Выберите города с населением НЕ в интервале 40 000 до 2 000 000 человек, напишите SQL-запрос.
4. Выберите людей * с возрастом НЕ в интервале 25 до 28 лет, используйте NOT, напишите SQL-запрос.
5. Выберите машины с годом выпуска от 2007 до 2011, напишите SQL-запрос.
Шаг 20. DISTINCT, дубликаты значений
Введение
В определенных запросах SQL как неприятный побочный результат выводится множество одинаковых, повторяющихся записей. Иногда нам необходимо уйти от данных повторений, убрать дубли из результатов запроса.
Теория и практика
В SQL существует специальная команда DISTINCT, которая предназначена для выбора в запросе только уникальных значений, уникальных строк, то есть исключает из вывода повторения и дублирования строк.
Синтаксис
Примеры
Вывести из таблицы AUTO марки автомобилей (MARK), исключить повторения – дубли.
Запрос без DISTINCT:
Рисунок 37. Запрос: дубли марок
Есть дублирующиеся марки авто AUDI, LADA в результате вывода.
Используем DISTINCT:
SELECT DISTINCT MARK FROM AUTO
Дубли строк не выводятся.
Рисунок 38. Запрос: марки авто
Вывести из таблицы AUTO марки и цвета автомобилей (MARK, COLOR), исключить повторения.
Рисунок 39. Запрос: марки авто и цвета
Несколько синих AUDI, используем DISTINCT.
Рисунок 40. Запрос: марки, цвета авто, только уникальные записи
Важные замечания
Важно отметить, что дубли исключаются DISTINCT только из колонок, перечисленных в SELECT; других колонок DISTINCT не касается.
С помощью DISTINCT очень удобно просмотреть, какие вообще значения есть в заданной колонке, например автомобили каких цветов присутствуют в таблице AUTO:
SELECT DISTINCT COLOR FROM AUTO
Вопросы учеников
Есть ли еще какой-либо способ исключить дубли из запроса?
Да, подобный способ называется группировка записей, и мы изучим его позже.
Можно ли использовать DISTINCT с ROWNUM?
Да, но тогда оператор DISTINCT бесполезен, его использование потеряет смысл.