English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Операторы IN & BETWEEN в SQL

В этом руководстве вы узнаете, как использовать операторы IN и BETWEEN и использовать их вместе с предложением WHERE.

Использование условий диапазона и членства

В предыдущей главе мы изучили, как использовать операторы AND и OR для комбинирования нескольких условий. Однако, иногда этого недостаточно, например, если нужно проверить значение, которое находится в диапазоне или наборе значений.

Здесь出现 операторы IN и BETWEEN, которые позволяют определить эксклюзивный диапазон или набор значений, а не комбинировать отдельные условия.

Оператор IN

Оператор IN является логическим оператором, который используется для проверки наличия определенного значения в наборе значений. Основной синтаксис можно представить следующим образом:

SELECT column_list FROM table_name
WHERE column_name IN (value1, value1,...);

Здесь,column_listявляется столбцом/полем таблицы базы данных, из которого нужно получить значение.Названиенапримерname,age,countryи т.д. Давайте посмотрим на несколько примеров.

Рассмотрим, что у нас есть в базе данныхemployeesТаблица, которая имеет следующие записи:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+

Следующие SQL-запросы вернут толькоdept_idсотрудников, которые являются 1 или 3.

SELECT * FROM employees
WHERE dept_id IN (1, 3);

После выполнения запроса вы получите следующий результат:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
+--------+--------------+------------+--------+---------+

Таким образом, вы можете использовать оператор NOT IN, который полностью противоположен оператору IN. Следующие SQL-запросы вернутdept_idВсе сотрудники, кроме тех, кто не является 1 или 3.

SELECT * FROM employees
WHERE dept_id NOT IN (1, 3);

После выполнения запроса, на этот раз вы получите следующий результат:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
+--------+--------------+------------+--------+---------+

Оператор BETWEEN

Если значение в столбце落在 определенном диапазоне, иногда вы хотите выбрать строку. Этот тип условия часто встречается при обработке числовых данных.

Чтобы выполнить запрос на основе таких условий, вы можете использовать оператор BETWEEN. Это логический оператор, который позволяет указать диапазон для проверки, как показано ниже:

SELECT column1_name, column2_name, columnN_name FROM table_name WHERE column_name BETWEEN min_value AND max_value;

Давайте на основеСотрудники (employees)Создание и выполнение запросов с условиями диапазона на таблице.

Определение числового диапазона

Следующие SQL-запросы вернут толькоemployeesЭти сотрудники имеют зарплату в диапазоне от 7000 до 9000.

SELECT * FROM employees WHERE salary BETWEEN 7000 AND 9000;

После выполнения, вы получите следующий результат:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
+--------+--------------+------------+--------+---------+

Определение диапазона дат

При использовании оператора BETWEEN с датами или временными значениями используйте функцию CAST() для явного преобразования этих значений в необходимый тип данных для достижения наилучших результатов. Например, если вы сравниваете строку, такую как '2016-12-31', с DATE, преобразуйте ее следующим образом:

Следующие SQL-запросы выбирают всех сотрудников, нанятых между 1 января 2006 года (т.е. '2006-01-01') и 31 декабря 2016 года (т.е. '2016-12-31'):

SELECT * FROM employees WHERE hire_date
BETWEEN CAST('2006-01-01' AS DATE) AND CAST('2016-12-31' AS DATE);

После выполнения запроса вы получите следующий результат:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+

Определение строкового диапазона

Хотя даты и диапазоны чисел наиболее распространены, вы также можете создать условия для поиска строк в диапазоне. Следующие SQL-запросы выбирают всех сотрудников, имена которых начинаются с любой буквы между 'O' и 'Z':

SELECT * FROM employees
WHERE emp_name BETWEEN 'O' AND 'Z';

После выполнения, вы получите следующий результат:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
+--------+--------------+------------+--------+---------+