Часть 12.8: Получить значение из базы данных в диапазоне: BETWEEN и SELECT в SQL и базах данных SQLite

Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. Как часто нам приходится получать значение в каком-нибудь диапазоне? На самом деле очень часто, например, сетевой инженер может вывести на экран программы мониторинга все коммутаторы, находящие в одной подсети или кластере. Экономист, считающий зарплату, может получить значение в диапазоне, например, выбрав сотрудника из какого-нибудь отдела, примеров можно привести массу, это первое, что пришло в голову.  Поскольку такая операция (получение данных из диапазона) выполняется очень часто, нам нужно научиться это делать — получать данные в заданном диапазоне из базы данных, естественно, на примере баз данных под управлением SQLite.

Получить значение из базы данных в диапазоне: BETWEEN и SELECT в SQL и базах данных SQLite

Получить значение из базы данных в диапазоне: BETWEEN и SELECT в SQL и базах данных SQLite

Для целей, описанных выше, в SQL и в базах данных SQLite есть специальный оператор BETWEEN. Оператор BETWEEN как раз-таки и позволяет нам сделать выборку данных в диапазоне. Из этой записи вы узнаете о том, как работает оператор BETWEEN и команда SELECT в SQL и базах данных SQLite, попробуете написать несколько запросов с использованием BETWEEN и команды SELECT и в заключение мы поговорим о том, с какими еще SQL командами можно использовать оператор BETWEEN.


Выборка данных в диапазоне при помощи BETWEEN и SELECT в SQL и базах данных SQLite

Делать SQL запросы SELECT более точными мы можем не только при помощи логических операторов AND и OR, в SQL и SQLite3 есть еще логический оператор BETWEEN (между). Логический оператор BETWEEN делает простые выборки данных из базы данных более сложными. Например, представьте, что у вас есть ежедневник, в который вы записываете все события, произошедшие с вами. И по каким-то причинам вы захотите уточнить, что с вами происходило с 5 сентября 2012 года по 12 декабря 2013 года.

В базе данных такую выборку вы бы реализовали при помощи команды SELECT и SQL оператора BETWEEN. А обычный ежедневник вы бы открыли на странице 5 сентября 2012 и посмотрели бы все страницы до 12 декабря 2013 включительно.

В принципе, вот так легко мы разобрались на словах с тем, как работает оператор BETWEEN и SELECT. Давайте сделаем несколько уточнений: BETWEEN используется с командой SELECT в том случае, когда мы хотим задать условие выборки данных клаузулой WHERE или, когда мы хотим сделать дополнительную фильтрацию данных клаузулой HAVING, после того, как была сделана группировка данных (GROUP BY).

Перейдем к примерам использования SQL команды SELECT с оператором BETWEEN, чтобы понять, как это всё реализовано в СУБД SQLite3.

Примеры BETWEEN и SELECT в  SQL и базе данных SQLite: получаем значение из диапазона

BETWEEN и SELECT очень часто используют вместе, давайте и мы попробуем это сделать. Создадим таблицу в базе данных, воспользовавшись командой CREATE TABLE:

Очень простая таблица из четырех столбцов. Мы обеспечили целостность данных при помощи ограничений уровня столбца и ограничения уровня таблицы. Так же у нашей таблицы есть два индекса: внутренний индекс таблицы ROWID, который был создан SQLite автоматически и ограничение первичного ключа PRIMARY KEY, которое не только обеспечивает целостность данных, но и ускоряет выборку данных из базы данных. Добавим строки в таблицу, для этого есть команда INSERT INTO:

А теперь воспользуемся SQL оператором BETWEEN и SELECT и сделаем выборку данных в диапазоне:

Вот так мы реализовали выборку данных из таблицы в диапазоне при помощи команды SELECT и оператора BETWEEN. Обратите внимание: крайнее левое значение и крайнее правое значение будут включены в результаты выборки данных. Но это еще не все: диапазон для выборки можно задать с использованием логического отрицания NOT, давайте изменим наш пример BETWEEN и SELECT, добавив логический оператор NOT:

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

Использование оператора BETWEEN с другими SQL командами

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

Оператор BETWEEN и команды манипуляции данными:

  1. Оператор BETWEEN может быть использован с командой INSERT в том случае, когда мы хотим добавить строки в таблицу базы данных  при помощи подзапроса SELECT.
  2. Оператор BETWEEN мы так же можем использовать вместе с командой DELETE, если мы хотим удалить строки из таблицы в каком-то определенном диапазоне.
  3. Оператор BETWEEN используется с командой UPDATE в том случае, когда есть необходимость изменять значения строк в диапазоне.

Оператор BETWEEN и команды определения данных:

  1. Если вы хотите создавать таблицу в базе данных при помощи ключевого слова AS и подзапроса SELECT, то можете использовать оператор BETWEEN в запросе SELECT.
  2. Для удаления таблицы из базы данных используется команда DROP, команда DROP работает с объектами базы данных, а оператор BETWEEN работает со значениями строк, ни строка, ни уж тем более значение, хранящееся в ячейке, не является объектом.
  3. Для модификации таблиц и других объектов базы данных используется команда ALTER, команда ALTER работает на уровне объектов базы данных, оператор BETWEEN работает на уровне строк базы данных, поэтому нет.

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

Один комментарий к записи Часть 12.8: Получить значение из базы данных в диапазоне: BETWEEN и SELECT в SQL и базах данных SQLite

Влад

Странно, но почему-то всегда считал, что BETWEEN — это клаузула, а не SQL оператор. Проверил по официальным документациям разных СУБД и убедился, что это именно оператор. А вот с чего у меня такое мнение сложилось — не помню и не понимаю)))

Текст комментария: