SQL 基础教程
SQL 连接
SQL 高级教程
SQL 参考资料

SQL IN & BETWEEN 运算符

在本教程中,您将学习如何使用带有 WHERE 子句的 INBETWEEN 运算符。

使用范围和条件

在上一章中,我们学习了如何使用 ANDOR 运算符组合多个条件。 但是,有时这还不够,而且效率很高,例如,如果您必须检查位于某个范围或一组值内的值。

在这里, INBETWEEN 运算符出现了,它允许您定义一个排他的范围或一组值,而不是组合单独的条件。

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

同样,您可以使用与 IN 完全相反的 NOT 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 进行比较,请将字符串转换为 DATE,如下所示:

以下 SQL 语句选择在 2006 年 1 月 1 日(即"2006-01-01")和 2016 年 12 月 31 日(即"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 |
+--------+--------------+------------+--------+---------+
Advertisements