BETWEEN, IN, LIMIT. Вывод данных из определенного диапазона в MySQL

Тестовая БД

В качестве тестовых данных для дальнейших примеров, будем использовать БД Bookstore книжного магазина и ее таблицу books.

mysql> USE Bookstore;

Database changed
mysql> SELECT id, title, author, price, creation_date FROM books;
+----+---------------------------+--------------------+--------+---------------------+
| id | title                     | author             | price  | creation_date       |
+----+---------------------------+--------------------+--------+---------------------+
|  1 | Дубровский (Акция)        | Александр Пушкин   | 230.00 | 2019-01-25 12:34:12 |
|  2 | Нос (Акция)               | Николай Гоголь     | 255.20 | 2019-01-15 13:20:38 |
|  3 | Мастер и Маргарита        | Михаил Булгаков    | 263.00 | 2019-01-06 17:50:07 |
|  4 | Мёртвые души (Акция)      | Николай Гоголь     | 173.00 | 2019-01-03 10:11:45 |
|  5 | Преступление и наказание  | Фёдор Достоевский  | 245.00 | 2019-01-07 10:13:09 |
|  6 | Война и мир               | Лев Толстой        | 341.00 | 2019-01-24 19:48:03 |
|  7 | Анна Каренина             | Лев Толстой        | 346.00 | 2019-01-14 17:16:31 |
|  8 | Отцы и дети               | Иван Тургенев      | 371.00 | 2019-01-13 18:08:20 |
|  9 | Собачье сердце            | Михаил Булгаков    | 232.00 | 2019-01-23 17:18:00 |
| 10 | Бесы                      | Фёдор Достоевский  | 212.00 | 2019-01-28 15:17:12 |
+----+---------------------------+--------------------+--------+---------------------+
10 rows in set (0.00 sec)

Оператор BETWEEN

Оператор BETWEEN позволяет выбирать записи, находящиеся в диапазоне между двумя определенными значениями.

Значениями могут быть числа, строки и даты.

Синтаксис оператора BETWEEN

SELECT column1, column2, ... , columnN
FROM table_name
WHERE column BETWEEN value1 AND value2;

Далее рассмотрим несколько примеров использования оператора BETWEEN.

Выведем записи, в которых колонка price принимает значения в диапазоне от 230 до 250.

mysql> SELECT id, title, author, price
    -> FROM books 
    -> WHERE price BETWEEN 230 AND 250;
+----+---------------------------+--------------------+--------+
| id | title                     | author             | price  |
+----+---------------------------+--------------------+--------+
|  1 | Дубровский (Акция)        | Александр Пушкин   | 230.00 |
|  5 | Преступление и наказание  | Фёдор Достоевский  | 245.00 |
|  9 | Собачье сердце            | Михаил Булгаков    | 232.00 |
+----+---------------------------+--------------------+--------+
3 rows in set (0.00 sec)

Выведем записи с книгами, названия которых находятся между значениями "Война и мир" и "Собачье сердце". Также для удобства восприятия, отсортируем записи по колонке title.

Важно упомянуть, что диапазон записей расчитывается по порядку (по алфавиту), а не по фактическому положению записей в таблице.

mysql> SELECT id, title, author, price 
    -> FROM books WHERE title
    -> BETWEEN 'Война и мир' AND 'Мастер и маргарита' ORDER BY title;
+----+---------------------------+--------------------+--------+
| id | title                     | author             | price  |
+----+---------------------------+--------------------+--------+
|  6 | Война и мир               | Лев Толстой        | 341.00 |
|  1 | Дубровский (Акция)        | Александр Пушкин   | 230.00 |
|  3 | Мастер и Маргарита        | Михаил Булгаков    | 263.00 |
+----+---------------------------+--------------------+--------+
3 rows in set (0.01 sec)

Выведем записи, которые были созданы в промежуток времени от 2019-01-14 до 2019-01-28.

mysql> SELECT id, title, author, creation_date
    -> FROM books
    -> WHERE creation_date BETWEEN '2019-01-14' AND '2019-01-28';
+----+---------------------------+--------------------+---------------------+
| id | title                     | author             | creation_date       |
+----+---------------------------+--------------------+---------------------+
|  1 | Дубровский (Акция)        | Александр Пушкин   | 2019-01-25 12:34:12 |
|  2 | Нос (Акция)               | Николай Гоголь     | 2019-01-15 13:20:38 |
|  6 | Война и мир               | Лев Толстой        | 2019-01-24 19:48:03 |
|  7 | Анна Каренина             | Лев Толстой        | 2019-01-14 17:16:31 |
|  9 | Собачье сердце            | Михаил Булгаков    | 2019-01-23 17:18:00 |
+----+---------------------------+--------------------+---------------------+
5 rows in set (0.00 sec)

Также можно воспользоваться логическим оператором NOT и вывести данные, которые НЕ входят в заданный диапазон.

Выведем записи с книгами, цена которых НЕ входит в диапазон от 170 до 250.

mysql> SELECT id, title, author, price
    -> FROM books
    -> WHERE price NOT BETWEEN 170 AND 250;
+----+---------------------------+--------------------+--------+
| id | title                     | author             | price  |
+----+---------------------------+--------------------+--------+
|  2 | Нос (Акция)               | Николай Гоголь     | 255.20 |
|  3 | Мастер и Маргарита        | Михаил Булгаков    | 263.00 |
|  6 | Война и мир               | Лев Толстой        | 341.00 |
|  7 | Анна Каренина             | Лев Толстой        | 346.00 |
|  8 | Отцы и дети               | Иван Тургенев      | 371.00 |
+----+---------------------------+--------------------+--------+
5 rows in set (0.00 sec)

Оператор IN

С помощью оператора IN можно выбрать диапазон конкретных значений.

Оператора IN является аналогом множества условий с оператором OR ( IN(a, b, c) = a OR b ORc ).

Синтаксис оператора IN

SELECT column1, column2, ... , columnN
FROM table_name
WHERE column IN (value1, value2, ... , valueN);

Далее представлены примеры использования оператора IN.

Выведем все записи с книгами авторов: Николай Гоголь, Александр Пушкин, Иван Тургенев.

mysql> SELECT id, title, author, price
    -> FROM books
    -> WHERE author IN ('Николай Гоголь', 'Александр Пушкин', 'Иван Тургенев');
+----+---------------------------+--------------------+--------+
| id | title                     | author             | price  |
+----+---------------------------+--------------------+--------+
|  1 | Дубровский (Акция)        | Александр Пушкин   | 230.00 |
|  2 | Нос (Акция)               | Николай Гоголь     | 255.20 |
|  4 | Мёртвые души (Акция)      | Николай Гоголь     | 173.00 |
|  8 | Отцы и дети               | Иван Тургенев      | 371.00 |
+----+---------------------------+--------------------+--------+
4 rows in set (0.00 sec)

В качестве значений оператора IN можно передавать записи из других таблиц.

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

mysql> SELECT id, title, author, price
    -> FROM books
    -> WHERE id IN (SELECT book_id FROM orders);
+----+---------------------------+--------------------+--------+
| id | title                     | author             | price  |
+----+---------------------------+--------------------+--------+
|  1 | Дубровский (Акция)        | Александр Пушкин   | 230.00 |
|  3 | Мастер и Маргарита        | Михаил Булгаков    | 263.00 |
+----+---------------------------+--------------------+--------+
2 rows in set (0.04 sec)

Используя логический оператор NOT, можно вывести записи, которые НЕ соответствуют указанным значениям в операторе IN.

mysql> SELECT id, title, author, price
    -> FROM books
    -> WHERE id NOT IN (1,2,4,8);
+----+---------------------------+--------------------+--------+
| id | title                     | author             | price  |
+----+---------------------------+--------------------+--------+
|  3 | Мастер и Маргарита        | Михаил Булгаков    | 263.00 |
|  5 | Преступление и наказание  | Фёдор Достоевский  | 245.00 |
|  6 | Война и мир               | Лев Толстой        | 341.00 |
|  7 | Анна Каренина             | Лев Толстой        | 346.00 |
|  9 | Собачье сердце            | Михаил Булгаков    | 232.00 |
| 10 | Бесы                      | Фёдор Достоевский  | 212.00 |
+----+---------------------------+--------------------+--------+
6 rows in set (0.01 sec)

Оператор LIMIT

LIMIT позволяет ограничить количество выводимых записей.

Синтаксис LIMIT

SELECT column1, column2, ... , columnN
FROM table_name
LIMIT number;

Выведем первые 5 записей таблицы books.

mysql> SELECT id, title, author, price FROM books LIMIT 5;
+----+---------------------------+--------------------+--------+
| id | title                     | author             | price  |
+----+---------------------------+--------------------+--------+
|  1 | Дубровский (Акция)        | Александр Пушкин   | 230.00 |
|  2 | Нос (Акция)               | Николай Гоголь     | 255.20 |
|  3 | Мастер и Маргарита        | Михаил Булгаков    | 263.00 |
|  4 | Мёртвые души (Акция)      | Николай Гоголь     | 173.00 |
|  5 | Преступление и наказание  | Фёдор Достоевский  | 245.00 |
+----+---------------------------+--------------------+--------+
5 rows in set (0.00 sec)