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

Operadores IN & BETWEEN do SQL

Neste tutorial, você aprenderá como usar os operadores IN e BETWEEN e usá-los juntamente com a cláusula WHERE.

Uso de condições de intervalo e de pertencimento

No capítulo anterior, aprendemos como usar os operadores AND e OR para combinar várias condições. Mas, às vezes, isso não é suficiente, por exemplo, se você precisar verificar valores dentro de um intervalo ou grupo de valores.

Aqui surge o operador IN e BETWEEN, que permite definir um intervalo exclusivo ou um grupo de valores, em vez de combinações de condições separadas.

Operador IN

O operador IN é um operador lógico, usado para verificar se um valor específico existe em um grupo de valores. Sua sintaxe básica pode ser fornecida da seguinte maneira:

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

在这里,column_list是要获取其值的数据库表的列/字段的名称,例如nameagecountry等。好吧,让我们看看一些实例。

考虑我们在数据库中有一个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 |
+--------+--------------+------------+--------+---------+

以下SQL语句将仅返回dept_id为1或3的那些雇员。

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

Após executar a consulta, você obterá o seguinte conjunto de resultados:

+--------+--------------+------------+--------+---------+
| 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的那些雇员以外的所有雇员。

Exemplo * 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之间的那些雇员。

Exemplo * FROM employees WHERE salary BETWEEN 7000 AND 9000;

Após a execução, você receberá a seguinte saída:

+--------+--------------+------------+--------+---------+
| 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()函数将这些值显式转换为所需的数据类型,以获得最佳结果。例如,如果在与DATE的比较中使用诸如“ 2016-12-31”之类的字符串,则将其转换为DATE,如下所示:

以下SQL语句选择2006年1月1日(即“ 2006-01-01”)至2016年12月31日(即“ 2016-12-31)之间雇佣的所有雇员:

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

Após executar a consulta, você obterá o seguinte conjunto de resultados:

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

00 |    NULL |

Definir Intervalo de String

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

Após a execução, você receberá a seguinte saída:

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