Summary: in this tutorial, you’ll learn how to use the SQL BETWEEN
operator to check if a value falls within a specific range.
Introduction to SQL BETWEEN operator
The BETWEEN
operator is one of the logical operators in SQL. The BETWEEN
operator checks if a value is within a range of values.
The syntax of the BETWEEN
operator is as follows:
Code language: SQL (Structured Query Language) (sql)
expression BETWEEN low AND high;
The BETWEEN
operator returns true if the expression
is greater than or equal to ( >=
) the low value and less than or equal to ( <=
) the high value.
Technically, the BETWEEN
is the equivalent to the following expression that uses the greater than or equal to (>=
) and less than or equal to (<=
) operators:
Code language: SQL (Structured Query Language) (sql)
expression >= low AND expression <= high
To compare a value with an exclusive range, you need to use the comparison operators less than (<
) and greater than ( >
).
NOT BETWEEN
To negate the result of the BETWEEN
operator, you use the NOT
operator:
Code language: SQL (Structured Query Language) (sql)
expression NOT BETWEEN low AND high
The NOT BETWEEN
returns true if the expression is less than low
or greater than (>) high
; otherwise, it returns false.
Like the BETWEEN
operator, you can rewrite the NOT BETWEEN
operator using the less than (<) and greater than (>) operators with the OR
operator as follows:
Code language: SQL (Structured Query Language) (sql)
expression < low OR expression > high
In practice, you often use the BETWEEN
and NOT BETWEEN
operator in the WHERE
clause of the SELECT
to select rows whose value of a column is within a specific range.
SQL BETWEEN operator examples
We’ll use the employees
table from the sample database to illustrate how the BETWEEN
operator works.
1) Using the SQL BETWEEN opeator with numbers example
The following statement uses the BETWEEN
operator to find all employees whose salaries are between 2,500 and 2,900:
Code language: SQL (Structured Query Language) (sql)
SELECT employee_id, first_name, last_name, salary FROM employees WHERE salary BETWEEN 2500 AND 2900 ORDER BY salary DESC;
Try It
+-------------+------------+-------------+---------+ | employee_id | first_name | last_name | salary | +-------------+------------+-------------+---------+ | 116 | Shelli | Baida | 2900.00 | | 117 | Sigal | Tobias | 2800.00 | | 126 | Irene | Mikkilineni | 2700.00 | | 118 | Guy | Himuro | 2600.00 | | 119 | Karen | Colmenares | 2500.00 | +-------------+------------+-------------+---------+
Notice that the result set includes the employees whose salaries are 2,500 and 2,900.
The following query returns the same result set as the above query. However, it uses comparison operators greater than or equal to (>=) and less than or equal to (<=) instead:
Code language: SQL (Structured Query Language) (sql)
SELECT employee_id, first_name, last_name, salary FROM employees WHERE salary >= 2500 AND salary <= 2900 ORDER BY salary;
Try It
2) Using SQL NOT BETWEEN example
The following example uses the NOT BETWEEN
operator to find all employees whose salaries are not in the range of 2,500 and 2,900:
Code language: SQL (Structured Query Language) (sql)
SELECT employee_id, first_name, last_name, salary FROM employees WHERE salary NOT BETWEEN 2500 AND 2900 ORDER BY salary DESC;
Try It
+-------------+-------------+------------+----------+ | employee_id | first_name | last_name | salary | +-------------+-------------+------------+----------+ | 100 | Steven | King | 24000.00 | | 101 | Neena | Kochhar | 17000.00 | | 102 | Lex | De Haan | 17000.00 | | 145 | John | Russell | 14000.00 | | 146 | Karen | Partners | 13500.00 | | 201 | Michael | Hartstein | 13000.00 | | 205 | Shelley | Higgins | 12000.00 | | 108 | Nancy | Greenberg | 12000.00 | | 114 | Den | Raphaely | 11000.00 | | 204 | Hermann | Baer | 10000.00 | | 109 | Daniel | Faviet | 9000.00 | | 103 | Alexander | Hunold | 9000.00 | | 176 | Jonathon | Taylor | 8600.00 | | 177 | Jack | Livingston | 8400.00 | | 206 | William | Gietz | 8300.00 | | 121 | Adam | Fripp | 8200.00 | | 110 | John | Chen | 8200.00 | | 120 | Matthew | Weiss | 8000.00 | | 122 | Payam | Kaufling | 7900.00 | | 112 | Jose Manuel | Urman | 7800.00 | | 111 | Ismael | Sciarra | 7700.00 | | 178 | Kimberely | Grant | 7000.00 | | 113 | Luis | Popp | 6900.00 | | 123 | Shanta | Vollman | 6500.00 | | 203 | Susan | Mavris | 6500.00 | | 179 | Charles | Johnson | 6200.00 | | 202 | Pat | Fay | 6000.00 | | 104 | Bruce | Ernst | 6000.00 | | 106 | Valli | Pataballa | 4800.00 | | 105 | David | Austin | 4800.00 | | 200 | Jennifer | Whalen | 4400.00 | | 107 | Diana | Lorentz | 4200.00 | | 192 | Sarah | Bell | 4000.00 | | 193 | Britney | Everett | 3900.00 | | 115 | Alexander | Khoo | 3100.00 | +-------------+-------------+------------+----------+
3) Using SQL BETWEEN operator with a date ranges
The following example uses the BETWEEN
operator to find all employees who joined the company between January 1, 1999
, and December 31, 2000
:
Code language: SQL (Structured Query Language) (sql)
SELECT employee_id, first_name, last_name, hire_date FROM employees WHERE hire_date BETWEEN '1999-01-01' AND '2000-12-31' ORDER BY hire_date;
Try It
+-------------+------------+------------+------------+ | employee_id | first_name | last_name | hire_date | +-------------+------------+------------+------------+ | 107 | Diana | Lorentz | 1999-02-07 | | 178 | Kimberely | Grant | 1999-05-24 | | 119 | Karen | Colmenares | 1999-08-10 | | 113 | Luis | Popp | 1999-12-07 | | 179 | Charles | Johnson | 2000-01-04 | +-------------+------------+------------+------------+
The following example uses the NOT BETWEEN
operator to find employees who have not joined the company from January 1, 1989
to December 31, 1999
:
Code language: SQL (Structured Query Language) (sql)
SELECT employee_id, first_name, last_name, hire_date FROM employees WHERE hire_date NOT BETWEEN '1989-01-01' AND '1992-12-31' ORDER BY hire_date;
Try It
Code language: JavaScript (javascript)
+-------------+------------+-----------+------------+ | employee_id | first_name | last_name | hire_date | +-------------+------------+-----------+------------+ | 100 | Steven | King | 1987-06-17 | | 200 | Jennifer | Whalen | 1987-09-17 | | 179 | Charles | Johnson | 2000-01-04 | +-------------+------------+-----------+------------+ 3 rows in set (0.00 sec)
4) Using SQL BETWEEN operator with a function example
The following example uses the BETWEEN operator with the YEAR function to find employees who joined the company between 1990 and 1993:
SELECT employee_id, first_name, last_name, year(hire_date) joined_year FROM employees WHERE year(hire_date) BETWEEN 1990 and 1993 ORDER BY hire_date;
Output:
+-------------+------------+-----------+-------------+ | employee_id | first_name | last_name | joined_year | +-------------+------------+-----------+-------------+ | 103 | Alexander | Hunold | 1990 | | 104 | Bruce | Ernst | 1991 | | 102 | Lex | De Haan | 1993 | +-------------+------------+-----------+-------------+
In this example:
- First, the
YEAR()
function returns the year from the hire date. - Second, the
BETWEEN
operator uses the result of theYEAR()
function and check if it is within the range 1990 and 1993.
If your database doesn’t support the YEAR()
function, you need to use a similar function:
Database | The function to extract the year from a date |
---|---|
PostgreSQL | DATE_PART('year', hire_date) |
Oracle | EXTRACT(year from hire_date) |
SQL Server | YEAR(hire_date) |
Summary
- The BETWEEN operator returns true if a value is within a specific range.
- Use the NOT operator to negate the BETWEEN opeator.
Was this tutorial helpful ?
В этом учебном материале вы узнаете, как использовать SQL условие BETWEEN с синтаксисом и примерами.
Описание
SQL условие BETWEEN позволяет легко проверить, находится ли выражение в диапазоне значений (включительно). Его можно использовать в операторе SELECT, INSERT, UPDATE или DELETE.
Синтаксис
Синтаксис для условия BETWEEN в SQL:
expression BETWEEN value1 AND value2;
Параметры или аргументы
- expression
- Столбец или расчет.
- value1 и value2
- Эти значения создают инклюзивный диапазон, с которым сравнивается expression.
Примечание
Условие SQL BETWEEN будет возвращать записи, где выражение находится в диапазоне значений value1 и value2 (включительно).
Давайте рассмотрим пример использования условия BETWEEN для получения значений в числовом диапазоне.
В этом примере у нас есть таблица suppliers со следующими данными:
supplier_id | supplier_name | city | state |
---|---|---|---|
100 | Yandex | Moscow | Moscow |
200 | Lansing | Michigan | |
300 | Oracle | Redwood City | California |
400 | Bing | Redmond | Washington |
500 | Yahoo | Sunnyvale | Washington |
600 | DuckDuckGo | Paoli | Pennsylvania |
700 | Qwant | Paris | Ile de France |
800 | Menlo Park | California | |
900 | Electronic Arts | San Francisco | California |
Выполните следующий оператор SELECT:
SELECT * FROM suppliers WHERE supplier_id BETWEEN 300 AND 600; |
Будет выбрано 4 записи. Вот результаты, которые вы должны получить:
supplier_id | supplier_name | city | state |
---|---|---|---|
300 | Oracle | Redwood City | California |
400 | Bing | Redmond | Washington |
500 | Yahoo | Sunnyvale | Washington |
600 | DuckDuckGo | Paoli | Pennsylvania |
В этом примере возвращаются все строки из таблицы suppliers, где supplier_id находится в диапазоне от 300 до 600 (включительно). Это эквивалентно следующему запросу SELECT:
SELECT * FROM suppliers WHERE supplier_id >= 300 AND supplier_id <= 600; |
Пример — использование условия BETWEEN со значениями даты
Даты могут быть несколько сложными в SQL, и то, как вы используете условие BETWEEN с датами, зависит от базы данных, которую вы используете (т.е. Oracle, SQL Server, MySQL и т.д.). Мы покажем вам пример для каждой из основных технологий баз данных. Итак, начнем.
В этом примере у нас есть таблица orders и следующими данными:
order_id | customer_id | order_date |
---|---|---|
1 | 7000 | 2019/06/18 |
2 | 5000 | 2019/06/18 |
3 | 8000 | 2019/06/19 |
4 | 4000 | 2019/06/20 |
5 | NULL | 2019/07/01 |
Введите один из следующих операторов SQL, в зависимости от базы данных, которую вы используете.
Для SQL Server, PostgreSQL и SQLite:
SELECT * FROM orders WHERE order_date BETWEEN ‘2019/06/19’ AND ‘2019/07/01’; |
Для Oracle (используйте функцию TO_DATE):
SELECT * FROM orders WHERE order_date BETWEEN TO_DATE (‘19.06.2019’, ‘dd.mm.yyyy’) AND TO_DATE (‘01.07.2019’, ‘dd.mm.yyyy’); |
Для MySQL и MariaDB (используйте функцию CAST):
SELECT * FROM orders WHERE order_date BETWEEN CAST(‘2019/06/19’ AS DATE) AND CAST(‘2019/07/01’ AS DATE); |
Будет выбрано 3 записи. Вот результаты, которые вы получите:
order_id | customer_id | order_date |
---|---|---|
3 | 8000 | 2019/06/19 |
4 | 4000 | 2019/06/20 |
5 | NULL | 2019/07/01 |
В этом примере будут возвращены все записи из таблицы orders, где значение order_date находится между 19 июня 2019 г. и 1 июля 2019 г. (включительно).
Пример — использование оператора NOT с условием BETWEEN
Условие BETWEEN может использоваться с оператором NOT для создания условия NOT BETWEEN. Давайте рассмотрим пример, который показывает, как использовать условие NOT BETWEEN в запросе.
В этом примере у нас есть таблица customer, содержащая следующие данные:
customer_id | first_name | last_name | favorite_website |
---|---|---|---|
4000 | Justin | Bieber | google.com |
5000 | Selena | Gomez | bing.com |
6000 | Mila | Kunis | yahoo.com |
7000 | Tom | Cruise | oracle.com |
8000 | Johnny | Depp | NULL |
9000 | Russell | Crowe | google.com |
Введите следующий SQL оператор:
SELECT * FROM customers WHERE customer_id NOT BETWEEN 5000 AND 8000; |
Будет выбрано 2 записи. Вот результаты, которые вы должны получить:
customer_id | first_name | last_name | favorite_website |
---|---|---|---|
4000 | Justin | Bieber | google.com |
9000 | Russell | Crowe | google.com |
Это запрос вернет все строки, где customer_id НЕ находится в диапазоне между 5000 и 8000 включительно. Это было бы эквивалентно следующему запросу SELECT:
SELECT * FROM customers WHERE customer_id < 5000 OR customer_id > 8000; |
Тестовая БД
В качестве тестовых данных для дальнейших примеров, будем использовать БД 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)
We extract data from SQL Server tables along with various conditions. Usually, we have data in large amounts and SQL Between operator helps to extract a specific range of data from this huge data. For example, suppose we want to know the product sales between Jan 2019 to May 2019. In this case, we can use this operator in a SQL query.
In this article, we will explore the SQL Between operator and its usage scenarios.
The Syntax of SQL Between operator
We use SQL Between operator in the Where clause for selecting a range of values. The syntax for SQL Between is as follows
SELECT Column_name FROM table WHERE test_expression BETWEEN min_value(expression) AND max_value; |
- Test_Expression: It is the expression or column on which we need to define a range
- Min_value(expression): We define a minimum range for the between operator. Its data type should be the same as of test_expression
- Max_value)expression): It is the maximum range for the between operator. It should also be the same data type as of min_value(expression) and test_expression
In my example, product sales between Jan 2019 to May 2019, we have min_value as Jan 2019 and max_value as May 2019.
The SQL Between operator returns TRUE if the Test_expression value is greater than or equal to the value of min_value(expression) and less than or equal to the value of max_value ( expression).
If the condition is not satisfied, it returns FALSE.
Usually, developers confuse on whether the result will be inclusive or exclusive of the specified range. For example, does the result set include (in product sales between Jan 2019 to May 2019) both Jan 2019 and May 2019 sales data and exclude Jan 2019 and May 2019. We will look at this with the next section of examples.
Let’s prepare a sample table and insert data into it.
I am using ApexSQL Generate as shown in the following screenshot. You can specify a custom date range to select appropriate data.
Once we generate the date, you can check the sample data in the table.
Example 1: SQL Between operator with Numeric values
We can specify numeric values in the SQL Between operator. Suppose we want to get data from Productdata table for ProductID between 101 and 105.
Execute the following query to get the data. You can specify numeric value directly in between operator without any single quote.
SELECT * FROM productdata WHERE ProductID BETWEEN 101 AND 105; |
Previously, we thought of a question – whether the between operator contains inclusive or exclusive values. In the output, we can see that both ProductID 101 and 105 are included in the output of SQL Between.
Example 2: SQL Between operator with Date Range
We can use SQL Between operator to get data for a specific date range. For example, in the following query, we want to get data from ProductSaleDate table in the range of 1st Jan 2019 and 1st April 2019. You need to specify the dates in a single quote.
SELECT * FROM productdata WHERE ProductSaleDate BETWEEN ‘2019-01-01’ AND ‘2019-04-01’ ORDER BY ProductSaleDate; |
We can use the CAST function to convert the value in the desired date format explicitly. For example, in the following query, we use the CAST function to convert a string into a date data type.
SELECT * FROM productdata WHERE ProductSaleDate BETWEEN CAST(‘20190101’ as date) AND CAST(‘20190401’ as date) ORDER BY ProductSaleDate; |
Similarly, we can use the CAST function to convert a string into a datetime2 data type.
SELECT * FROM productdata WHERE ProductSaleDate BETWEEN CAST(‘20190101’ as datetime2) AND CAST(‘20190401’ as datetime2) ORDER BY ProductSaleDate; |
In our sample data, productsaledate contains date along with the timestamp. In the SQL between the operator, we didn’t specify timestamp to get the required data. If you do not specify any timestamp, SQL automatically specifies timestamp as midnight. We need to b careful in using SQL Between with date columns. Let’s explore these using a further example.
Let’s create a table variable and insert few records in it. In the insert statement, you can see we are using timestamp for a few users while few users have the only date.
DECLARE @Users TABLE(Name varchar(40), ModifyDate DateTime) INSERT INTO @Users (Name, ModifyDate) VALUES (‘Raj’, ‘2019-02-01’); INSERT INTO @Users (Name, ModifyDate) VALUES (‘Raju’, ‘2019-02-01 09:32:42’); INSERT INTO @Users (Name, ModifyDate) VALUES (‘Rajendra’, ‘2019-02-01 15:04:09’); INSERT INTO @Users (Name, ModifyDate) VALUES (‘Akshita’, ‘2019-02-03’); INSERT INTO @Users (Name, ModifyDate) VALUES (‘Kashish’, ‘2019-02-03 21:42:43’); |
In the records, you can see SQL Server added timestamp automatically in case we do not specify timestamp explicitly.
This scenario is also applicable once we retrieve the records using SQL Between operator.
Let’s select the data from the table variable using the following query.
select * from @Users WHERE ModifyDate BETWEEN ‘2019-02-01’ AND ‘2019-02-03’ ORDER BY ModifyDate |
We should get all the records in the table but let’s view the output.
In the output, we do not have a record for user Kashish. As stated earlier, if we do not specify timestamp in the SQL Between operator, SQL Server automatically uses timestamp until midnight. Due to this reason, we get the output until 2019-02-03 00:00:00.000.
For User Kashish modifieddate is 2019-02-03 21:42:43 and it does not fulfill condition in SQL Between operator. Due to this, we do not get this user in the output.
Let’s execute the command again with a timestamp in SQL Between operator.
select * from @Users WHERE ModifyDate BETWEEN ‘2019-02-01’ AND ‘2019-02-03 22:00:00’ ORDER BY ModifyDate |
We get all records this time because it checks for data until 2019-02-03 22:00:000.
Example 3: SQL Between operator with a string
In this example, we want to get data from Productdata table having ProductCode between A and D. We also need to use a single quote for a string to get inclusive data.
SELECT * FROM productdata WHERE ProductCode BETWEEN ‘A’ AND ‘C’ ORDER BY ProductCode; |
In the output, you can see data for productcode between A and C.
Example 4: SQL NOT Between operator with a string
We might also want to exclude a particular range of data in the output. In this case, we can use SQL Between operator with Not statement.
Suppose, we want to get the top 10 records from the ProductData table but do not want to include ProductID 104 and 108. We can specify this condition using Not Between operator.
SELECT top 10 * FROM productdata WHERE ProductID Not BETWEEN 104 and 108 ORDER BY ProductID; |
In the output, we do not have data from ProductID 104 and 108.
Conclusion
In this article, we explored SQL Between operator along with its use cases. We should be familiar with the function to get a specific range of data. If you have any comments or questions, feel free to leave them in the comments below.
- Author
- Recent Posts
Hi! I am Rajendra Gupta, Database Specialist and Architect, helping organizations implement Microsoft SQL Server, Azure, Couchbase, AWS solutions fast and efficiently, fix related issues, and Performance Tuning with over 14 years of experience.
I am the author of the book «DP-300 Administering Relational Database on Microsoft Azure». I published more than 650 technical articles on MSSQLTips, SQLShack, Quest, CodingSight, and SeveralNines.
I am the creator of one of the biggest free online collections of articles on a single topic, with his 50-part series on SQL Server Always On Availability Groups.
Based on my contribution to the SQL Server community, I have been recognized as the prestigious Best Author of the Year continuously in 2019, 2020, and 2021 (2nd Rank) at SQLShack and the MSSQLTIPS champions award in 2020.
Personal Blog: https://www.dbblogger.com
I am always interested in new challenges so if you need consulting help, reach me at rajendra.gupta16@gmail.com
View all posts by Rajendra Gupta
Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. Как часто нам приходится получать значение в каком-нибудь диапазоне? На самом деле очень часто, например, сетевой инженер может вывести на экран программы мониторинга все коммутаторы, находящие в одной подсети или кластере. Экономист, считающий зарплату, может получить значение в диапазоне, например, выбрав сотрудника из какого-нибудь отдела, примеров можно привести массу, это первое, что пришло в голову. Поскольку такая операция (получение данных из диапазона) выполняется очень часто, нам нужно научиться это делать — получать данные в заданном диапазоне из базы данных, естественно, на примере баз данных под управлением SQLite.
Получить значение из базы данных в диапазоне: BETWEEN и SELECT в SQL и базах данных SQLite
Для целей, описанных выше, в SQL и в базах данных SQLite есть специальный оператор BETWEEN. Оператор BETWEEN как раз-таки и позволяет нам сделать выборку данных в диапазоне. Из этой записи вы узнаете о том, как работает оператор BETWEEN и команда SELECT в SQL и базах данных SQLite, попробуете написать несколько запросов с использованием BETWEEN и команды SELECT и в заключение мы поговорим о том, с какими еще SQL командами можно использовать оператор BETWEEN.
Выборка данных в диапазоне при помощи BETWEEN и SELECT в SQL и базах данных SQLite
Содержание статьи:
- Выборка данных в диапазоне при помощи BETWEEN и SELECT в SQL и базах данных SQLite
- Примеры BETWEEN и SELECT в SQL и базе данных SQLite: получаем значение из диапазона
- Использование оператора BETWEEN с другими SQL командами
Делать 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:
CREATE TABLE table1 ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, pro TEXT NOT NULL, sex TEXT NOT NULL, sal REAL CHECK (sal > 15000) ); |
Очень простая таблица из четырех столбцов. Мы обеспечили целостность данных при помощи ограничений уровня столбца и ограничения уровня таблицы. Так же у нашей таблицы есть два индекса: внутренний индекс таблицы ROWID, который был создан SQLite автоматически и ограничение первичного ключа PRIMARY KEY, которое не только обеспечивает целостность данных, но и ускоряет выборку данных из базы данных. Добавим строки в таблицу, для этого есть команда INSERT INTO:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
INSERT INTO table1 (name, pro, sex, sal) VALUES (‘Пупкин Матвей’, ‘Дантист’, ‘м’, 55000.00); INSERT INTO table1 (name, pro, sex, sal) VALUES (‘Cумкин Денис’, ‘Юрист’, ‘м’, 35040.90); INSERT INTO table1 (name, pro, sex, sal) VALUES (‘Иванов Иван’, ‘Младший юрист’, ‘м’, 16000.00); INSERT INTO table1 (name, pro, sex, sal) VALUES (‘Маркова Ирина’, ‘Бухгалтер’, ‘ж’, 31200.10); INSERT INTO table1 (name, pro, sex, sal) VALUES (‘Петрова Алина’, ‘Менеджер продаж’, ‘ж’, 21200.10); INSERT INTO table1 (name, pro, sex, sal) VALUES (‘Михайлова Любовь’, ‘Секретарь’, ‘ж’, 16200.10); INSERT INTO table1 (name, pro, sex, sal) VALUES (‘Сидорова Инна’, ‘Руководитель отдела обслуживания’, ‘ж’, 66200.10); INSERT INTO table1 (name, pro, sex, sal) VALUES (‘Михайлова Любовь’, ‘Документооборотчик’, ‘ж’, 21200.10); |
А теперь воспользуемся SQL оператором BETWEEN и SELECT и сделаем выборку данных в диапазоне:
SELECT * FROM table1 WHERE id BETWEEN 3 AND 7; 3|Иванов Иван|Младший юрист|м|16000.0 4|Маркова Ирина|Бухгалтер|ж|31200.1 5|Петрова Алина|Менеджер продаж|ж|21200.1 6|Михайлова Любовь|Секретарь|ж|16200.1 7|Сидорова Инна|Руководитель отдела обслуживания|ж|66200.1 |
Вот так мы реализовали выборку данных из таблицы в диапазоне при помощи команды SELECT и оператора BETWEEN. Обратите внимание: крайнее левое значение и крайнее правое значение будут включены в результаты выборки данных. Но это еще не все: диапазон для выборки можно задать с использованием логического отрицания NOT, давайте изменим наш пример BETWEEN и SELECT, добавив логический оператор NOT:
SELECT * FROM table1 WHERE id NOT BETWEEN 3 AND 7; 1|Пупкин Матвей|Дантист|м|55000.0 2|Cумкин Денис|Юрист|м|35040.9 8|Михайлова Любовь|Документооборотчик|ж|21200.1 |
А вот так работает BETWEEN и SELECT с использование логического отрицания. Мы в полной мере рассмотрели возможности BETWEEN и команды SELECT и научились делать выборку данных в заданном диапазоне.
Использование оператора BETWEEN с другими SQL командами
Оператор BETWEEN мы можем использовать не только с командой SELECT, но и с другими SQL командами, которые есть в SQLite3. Как всегда, мы не будем говорить о командах управления транзакциями и командах определения доступа к данным.
Оператор BETWEEN и команды манипуляции данными:
- Оператор BETWEEN может быть использован с командой INSERT в том случае, когда мы хотим добавить строки в таблицу базы данных при помощи подзапроса SELECT.
- Оператор BETWEEN мы так же можем использовать вместе с командой DELETE, если мы хотим удалить строки из таблицы в каком-то определенном диапазоне.
- Оператор BETWEEN используется с командой UPDATE в том случае, когда есть необходимость изменять значения строк в диапазоне.
Оператор BETWEEN и команды определения данных:
- Если вы хотите создавать таблицу в базе данных при помощи ключевого слова AS и подзапроса SELECT, то можете использовать оператор BETWEEN в запросе SELECT.
- Для удаления таблицы из базы данных используется команда DROP, команда DROP работает с объектами базы данных, а оператор BETWEEN работает со значениями строк, ни строка, ни уж тем более значение, хранящееся в ячейке, не является объектом.
- Для модификации таблиц и других объектов базы данных используется команда ALTER, команда ALTER работает на уровне объектов базы данных, оператор BETWEEN работает на уровне строк базы данных, поэтому нет.
Мы увидели, что сделать выборку данных из базы данных в заданном диапазоне не так уж и сложно, для этих целей используйте SQL оператор BETWEEN и команду SELECT.