Тестовая БД
В качестве тестовых данных для дальнейших примеров, будем использовать БД 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 OR
c ).
Синтаксис оператора 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)