SQL BETWEEN 运算符详解

导航至

这篇文章由 Pius Aboyi 撰写。向下滚动查看作者简介。

SQL 提供了许多运算符,您可以使用它们根据特定条件在查询中过滤数据。例如,当您需要获取值在某个范围内的数据时,可以使用 BETWEEN 运算符。

BETWEEN 运算符的一个实际用例是,当您需要获取某个年龄范围(例如五岁到十岁)内的所有儿童记录时。在这种情况下,您的查询将获取年龄值从 5 到 10 的所有行。

在本文中,您将通过循序渐进的指南和示例学习如何使用 BETWEEN 运算符。

什么是 SQL BETWEEN 运算符?

BETWEEN 运算符选择在特定范围内的行。由于它是包含性的,因此它将包括值等于范围的开始和结束的行。您可以使用 BETWEEN 运算符来过滤文本、数字和日期值。

BETWEEN 运算符的语法如下所示

table BETWEEN minimum_value AND maximum_value

通常,BETWEEN 运算符放置在 WHERE 子句之后,类似于其他 SQL 逻辑运算符。

sql-between-operator

何时使用 BETWEEN 运算符

BETWEEN 运算符可以轻松解决许多情况和问题。

  1. 获取时间范围内的数据:当您需要使用开始日期和结束日期选择数据时,BETWEEN 运算符非常有用,例如,如果您需要在金融应用程序中获取 2 月 1 日到 3 月 15 日的所有交易。

  2. 获取数字范围内的数据:当您需要获取特定字段的值在某个范围内的行时,可以使用 BETWEEN 运算符。这可能是从库存中获取可用数量在 10 到 20 范围内的商品。

  3. 在范围内搜索文本:您可以使用 BETWEEN 运算符来获取使用包含两个字符串的范围的行。例如,在一个包含学生及其成绩记录的表中,您可以选择所有成绩为 A 到 C 的学生的记录。

何时不使用 BETWEEN 运算符

不应使用 BETWEEN 运算符的一个好例子是,当范围的一个或两个端点不应包含在结果中时。也就是说,您想获取 A 到 C 之间的行,但排除 A 和 C。在这种情况下,结果将仅包含 B 行。如果您想排除范围中的较低值,则获取 4 到 8 之间的行应仅返回 5、6、7 和 8 行,同时省略 4,因为它较低值。

如何使用 SQL BETWEEN 运算符

在本节中,我们将引导您了解如何在 MySQL 和 MS SQL Server 中使用 BETWEEN 运算符。

步骤 1:创建 SQL 表

为了跟随我们即将向您展示的示例,请首先在您的数据库中创建一个新表。

运行以下查询以在 MySQL 或 SQL Server 中创建表:MySQL

CREATE TABLE students_record(id int AUTO_INCREMENT PRIMARY KEY, full_name varchar(100) NOT NULL, grade varchar(20) NOT NULL, subject varchar(150) NOT NULL, date_of_birth date NOT NULL);

SQL Server

CREATE TABLE students_record(id int PRIMARY KEY IDENTITY(1,1), full_name varchar(100) NOT NULL, grade varchar(20) NOT NULL, subject varchar(150) NOT NULL, date_of_birth date NOT NULL);

上述查询将创建一个新的 students_record 表。该表具有 id、full_name、grade、subject 和 date_of_birth 列。

接下来,使用以下数据填充表

id full_name grade subject date_of_birth
1 Simon Says A Chemistry 1994-02-13
2 John Doe C Chemistry 1998-11-05
3 Richard Rose B Agric 2000-01-09
4 Mary West A Math 2003-08-22
5 Pedro Joseph D History 1995-10-10
6 Phil Jack E Biology 1996-12-05
7 Phoden Mike A Physics 2001-03-24

步骤 2:选择特定成绩范围内的学生

在此步骤中,我们将向您展示如何编写一个查询,该查询将选择所有成绩为 B 到 D 的学生。

为此,运行以下 SQL 查询

SELECT * FROM students_record WHERE grade BETWEEN 'B' AND 'D';

下表显示了查询的结果

id full_name grade subject date_of_birth
2 John Doe C Chemistry 1998-11-05
3 Richard Rose B Agric 2000-01-09
5 Pedro Joseph D History 1995-10-10

当 BETWEEN 运算符使用文本值作为范围时,搜索以字典顺序完成。为了更好地理解这一点,请运行以下查询

SELECT * FROM students_record WHERE full_name BETWEEN 'Mary West' AND 'Phil Jack';

下表显示了查询的结果

id full_name grade subject date_of_birth
1 Simon Says A Chemistry 1994-02-13
2 John Doe C Chemistry 1998-11-05
3 Richard Rose B Agric 2000-01-09
4 Mary West A Math 2003-08-22
5 Pedro Joseph D History 1995-10-10
6 Phil Jack E Biology 1996-12-05
7 Phoden Mike A Physics 2001-03-24

查询的结果返回从“Mary West”到“Phil Jack”的名称。这是因为仅选择了 full_name 列中第一个字符的顺序大于 M(包括 M)的值,一直到“Phil”。请注意,查询在密切相关的“Phoden”处停止,因为第三个字符“o”的顺序大于“Phil”中的“i”。

步骤 3:选择出生在日期范围内的学生

要选择两个日期范围内的行,请运行以下 SQL 查询

SELECT * FROM students_record WHERE date_of_birth BETWEEN '1994-01-01' AND '1999-12-31';

下表显示了查询的结果

id full_name grade subject date_of_birth
1 Simon Says A Chemistry 1994-02-13
2 John Doe C Chemistry 1998-11-05
5 Pedro Joseph D History 1995-10-10
6 Phil Jack E Biology 1996-12-05

您必须通过用引号将开始日期和结束日期括起来,以字符串形式提供它们。

步骤 4:选择范围外的行

使用 NOT 运算符,可以仅选择 BETWEEN 语句中范围外的行。您可以使用 NOT BETWEEN 运算符来执行此操作。

运行以下查询以获取所有出生日期不在 1994 年 1 月 1 日至 1999 年 12 月 31 日之间的学生的记录

SELECT * FROM students_record WHERE date_of_birth NOT BETWEEN '1994-01-01' AND '1999-12-31';

下表显示了查询的结果

id full_name grade subject date_of_birth
4 Mary West A Math 2003-08-22
5 Pedro Joseph D History 1995-10-10
6 Phil Jack E Biology 1996-12-05

步骤 5:将 BETWEEN 与 IN 运算符结合使用

IN 运算符接受以逗号分隔的值列表。然后,它评估每一行以确定是否存在任何值。与检查范围的 BETWEEN 运算符不同,IN 运算符要求您指定要过滤的所有值。

在此示例中,我们将结合使用 IN 和 BETWEEN 运算符,以一种新的方式在 students_record 表上过滤数据。

sql-in-operator

首先,运行以下查询

SELECT * FROM students_record WHERE grade BETWEEN 'A' AND 'C' AND date_of_birth IN('1998-11-05', '1994-02-13');

下表显示了查询的结果

id full_name grade subject date_of_birth
4 Mary West A Math 2003-08-22
5 Pedro Joseph D History 1995-10-10
6 Phil Jack E Biology 1996-12-05

现在让我们回顾一下查询的实际作用。

WHERE 子句的第一部分检查成绩在 A 和 C 之间的学生。然后,IN 运算符进一步过滤结果,仅包括满足第一个条件且出生于 1998-11-05 或 1994-02-13 的学生。

什么是时间序列数据库?

时间序列数据库只是一类特殊的数据库,用于存储以时间为关键因素的数据。它们通常将数据存储为键值对,其中时间是键,值可以是消息。

在本文的前面,您看到了如何使用 BETWEEN 运算符来过滤日期范围的数据。由于时间序列数据库优先考虑每个值的周期(时间),因此很容易按两个或多个时间范围过滤数据。

结论

在本文中,我们介绍了 SQL BETWEEN 运算符。它是一个 SQL 运算符,可以轻松地按范围过滤数据。

此外,我们还通过几个使用 SQL BETWEEN 运算符从表中获取数据的实际示例向您进行了演示。这些示例包括使用文本和日期作为范围。

您还了解了如何将 BETWEEN 运算符与 IN 运算符结合使用,以向 SQL select 查询添加两级过滤。与链接诸如 >、<、AND 和 = 之类的逻辑运算符以获得相同结果相比,它们更易于使用且更具可读性。

关于作者

这篇文章由 Pius Aboyi 撰写。Pius 是一位移动和 Web 开发者,拥有超过 4 年的 Android 平台开发经验。他使用 Java、Kotlin 和 PHP 编写代码。他喜欢撰写有关技术的文章并为开发者创建操作指南教程。