Как найти диапазон в sql

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:

expression BETWEEN low AND high;

Code language: SQL (Structured Query Language) (sql)

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:

expression >= low AND expression <= high

Code language: SQL (Structured Query Language) (sql)

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:

expression NOT BETWEEN low AND high

Code language: SQL (Structured Query Language) (sql)

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:

expression < low OR expression > high

Code language: SQL (Structured Query Language) (sql)

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.

employees_table

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:

SELECT employee_id, first_name, last_name, salary FROM employees WHERE salary BETWEEN 2500 AND 2900 ORDER BY salary DESC;

Code language: SQL (Structured Query Language) (sql)

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:

SELECT employee_id, first_name, last_name, salary FROM employees WHERE salary >= 2500 AND salary <= 2900 ORDER BY salary;

Code language: SQL (Structured Query Language) (sql)

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:

SELECT employee_id, first_name, last_name, salary FROM employees WHERE salary NOT BETWEEN 2500 AND 2900 ORDER BY salary DESC;

Code language: SQL (Structured Query Language) (sql)

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:

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;

Code language: SQL (Structured Query Language) (sql)

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:

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;

Code language: SQL (Structured Query Language) (sql)

Try It

+-------------+------------+-----------+------------+ | 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)

Code language: JavaScript (javascript)

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 the YEAR() 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 Google 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 Facebook 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 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)

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.

ApexSQL Generate

Once we generate the date, you can check the sample data in the table.

sample data

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.

 Between operator with Numeric Range

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;

SQL Between operator with Date Range

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.

insert sample data

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.

date range with timestamp

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.

date range

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.

SQL Between operator with a string

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.

SQL NOT Between operator with a string

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

Rajendra Gupta

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

Rajendra Gupta

Привет, посетитель сайта 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

Содержание статьи:

  • Выборка данных в диапазоне при помощи 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 и команды манипуляции данными:

  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.

Понравилась статья? Поделить с друзьями:
  • Если пересолила блюдо как это исправить
  • Как найти ширину тела
  • Как составить план работы на год в таблице
  • Как составить план практики в производственную практику
  • Как найти значение одного столбца в другом