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 |
第二步:选择特定成绩范围内的学生
在此步骤中,我们将向您展示如何编写查询以选择所有成绩为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”。
第三步:选择出生在特定日期范围内的学生
要选择两个日期范围内的行,请运行以下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 |
您必须将开始和结束日期作为字符串提供,用引号括起来。
第四步:选择范围之外的数据
使用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 |
第五步:使用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月5日或1994年2月13日的学生。
什么是时间序列数据库?
时间序列数据库是存储以时间为关键因素的特定数据库组。它们通常以键和值的形式存储数据,其中时间是键,值可以是消息。
在本文的早期部分,您看到了如何使用BETWEEN运算符通过日期范围过滤数据。由于时间序列数据库优先考虑每个值的时期(时间),因此很容易通过两个或更多时间范围来过滤数据。
结论
在本篇文章中,我们介绍了SQL BETWEEN运算符。这是一个SQL运算符,可以轻松通过范围过滤数据。
此外,我们通过几个使用SQL BETWEEN运算符从表中检索数据的实际示例向您介绍了它的用法。这些示例包括使用文本和日期作为范围。
您也看到了如何使用BETWEEN运算符与IN运算符结合使用,为SQL选择查询添加两层过滤。它们比像>、<、AND和=这样的逻辑运算符链更容易使用,也更易于阅读。
关于作者
本文由Pius Aboyi撰写。 Pius是一位拥有超过4年Android平台开发经验的移动和Web开发者。他使用Java、Kotlin和PHP编写代码。他热爱写关于技术的文章,并为开发者创建教程。