本教程将演示如何使用sql between
运算符选择指定范围内的值。
between
运算符是逻辑运算符。 它返回true
,false
或unknown
值。 between
运算符用于select,update或delete语句中以查找范围内的值。
以下说明了between
运算符的语法:
expression between low and high;
在上面语法中,
low
和high
可以是表达式或文字值,要求low
的值小于high
的值。如果表达式大于或等于(>=
)low
值且小于或等于(<=
)high
值,则between
运算符返回true
,这相当于以下条件:
expression >= low and expression <= high
如果要指定独占范围,则必须使用小于(<
)和大于(>
)的比较运算符。
要否定between
运算符的结果,可以添加not
运算符:
expression not between low and high
如果表达式小于低于或大于(>
)的值,则not between
返回true
; 否则它返回:false
。
可以使用以下条件重写not between
:
expression < low or expression > high
我们将使用示例数据库中的employees
表来演示between
运算符的工作原理。
mysql> desc employees;
+---------------+--------------+------+-----+---------+----------------+
| field | type | null | key | default | extra |
+---------------+--------------+------+-----+---------+----------------+
| employee_id | int(11) | no | pri | null | auto_increment |
| first_name | varchar(20) | yes | | null | |
| last_name | varchar(25) | no | | null | |
| email | varchar(100) | no | | null | |
| phone_number | varchar(20) | yes | | null | |
| hire_date | date | no | | null | |
| job_id | int(11) | no | mul | null | |
| salary | decimal(8,2) | no | | null | |
| manager_id | int(11) | yes | mul | null | |
| department_id | int(11) | yes | mul | null | |
+---------------+--------------+------+-----+---------+----------------+
10 rows in set
sql between与数字示例
以下语句使用between
运算符查找薪水在2500
和3000
之间的所有员工:
select
employee_id, first_name, last_name, salary
from
employees
where
salary between 2500 and 3000;
执行上面查询语句,得到以下结果 -
请注意,结果集中包含薪水为2500
和3000
的员工。
以下查询使用大于或等于(>=
)且小于或等于(<=
)的比较运算符和逻辑运算符and
,返回相同的结果集:
select
employee_id,
first_name,
last_name,
salary
from
employees
where
salary >= 2500
and salary <= 3000;
要查找薪水不在2500
和10000
范围内的所有员工,请在where
子句中使用not between
运算符,如下所示:
select
employee_id, first_name, last_name, salary
from
employees
where
salary not between 2500 and 10000
order by salary;
执行上面查询语句,得到以下结果 -
sql between日期示例
要查找在1999年1月1日到2000年12月31日之间加入公司的所有员工,查询雇用日期(hire_date
)是否在以下范围内:
select
employee_id, first_name, last_name, hire_date
from
employees
where
hire_date between '1999-01-01' and '2000-12-31'
order by hire_date;
执行上面示例代码,得到以下结果 -
+-------------+------------+-----------+------------+
| employee_id | first_name | last_name | hire_date |
+-------------+------------+-----------+------------+
| 107 | diana | chen | 1999-02-07 |
| 178 | kimberely | yang | 1999-05-24 |
| 119 | karen | zhang | 1999-08-10 |
| 113 | min | su | 1999-12-07 |
| 179 | charles | yang | 2000-01-04 |
+-------------+------------+-----------+------------+
5 rows in set
要检索不在1989年1月1日到1999年12月31日这个时间内加入公司的所有员工,请使用not between
运算符,如下所示:
select
employee_id, first_name, last_name, hire_date
from
employees
where
hire_date not between '1989-01-01' and '1999-01-30'
order by hire_date;
执行上面示例代码,得到以下结果 -
1. 低和高的值
between
运算符需要低值和高值。 当从用户那里获得输入时,在将其传递给查询之前,应始终检查低值是否小于高值。 如果低值大于高值,将得到一个空的结果集。
以下查询不返回任何行,因为低值大于高值:
select
first_name, last_name, salary
from
employees
where
salary between 5000 and 2000;
2. 将between运算符与datetime数据一起使用
考虑以下tb1
表,结构和数据如下所示:
2019年9月23日至2019年9月30日期间有5
行数据。如果使用between
运算符查询create_time
值介于2019-09-23
和2019-09-30
之间的行记录,将获得所期望的内容。
select
id, create_time
from
tb1
where
create_time between '20190920' and '20190930';
执行上面查询语句,得到以下结果 -
结果显示只返回了4
行。 这是因为当使用以下条件时:
create_time between '20190920' and '20190930';
数据库系统将其转换为:
create_time between '20190920 00:00:00.000000' and '20190930 00:00:00.000000';
因此,2019-09-30 14:29:55
值的行记录未包含在结果集中。
在本教程中,我们学习示了如何使用sql between
运算符根据范围选择数据,通过本教程,可以使用between
运算符来组合成为更复杂的查询语句。