SQL BETWEEN 运算符详解
作者:社区 / 开发者
2023年5月22日
导航至
这篇文章由 Pius Aboyi 撰写。向下滚动查看作者简介。
SQL 提供了许多运算符,您可以使用它们根据特定条件在查询中过滤数据。例如,当您需要获取值在某个范围内的数据时,可以使用 BETWEEN 运算符。
BETWEEN 运算符的一个实际用例是,当您需要获取某个年龄范围(例如五岁到十岁)内的所有儿童记录时。在这种情况下,您的查询将获取年龄值从 5 到 10 的所有行。
在本文中,您将通过循序渐进的指南和示例学习如何使用 BETWEEN 运算符。
什么是 SQL BETWEEN 运算符?
BETWEEN 运算符选择在特定范围内的行。由于它是包含性的,因此它将包括值等于范围的开始和结束的行。您可以使用 BETWEEN 运算符来过滤文本、数字和日期值。
BETWEEN 运算符的语法如下所示
table BETWEEN minimum_value AND maximum_value
通常,BETWEEN 运算符放置在 WHERE 子句之后,类似于其他 SQL 逻辑运算符。
何时使用 BETWEEN 运算符
BETWEEN 运算符可以轻松解决许多情况和问题。
-
获取时间范围内的数据:当您需要使用开始日期和结束日期选择数据时,BETWEEN 运算符非常有用,例如,如果您需要在金融应用程序中获取 2 月 1 日到 3 月 15 日的所有交易。
-
获取数字范围内的数据:当您需要获取特定字段的值在某个范围内的行时,可以使用 BETWEEN 运算符。这可能是从库存中获取可用数量在 10 到 20 范围内的商品。
-
在范围内搜索文本:您可以使用 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 表上过滤数据。
首先,运行以下查询
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 编写代码。他喜欢撰写有关技术的文章并为开发者创建操作指南教程。