Sql简介 专题
专题目录
您的位置:database > Sql简介专题 > SQL Between运算符
SQL Between运算符
作者:--    发布时间:2019-11-20

本教程将演示如何使用sql between运算符选择指定范围内的值。

sql between运算符简介

between运算符是逻辑运算符。 它返回truefalseunknown值。 between运算符用于selectupdatedelete语句中以查找范围内的值。

以下说明了between运算符的语法:

expression between low and high;

在上面语法中,

  • 表达式是在低和高定义的范围内测试的表达式。
  • lowhigh可以是表达式或文字值,要求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

2. sql between运算符示例

我们将使用示例数据库中的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运算符查找薪水在25003000之间的所有员工:

select 
    employee_id, first_name, last_name, salary
from
    employees
where
    salary between 2500 and 3000;

执行上面查询语句,得到以下结果 -

请注意,结果集中包含薪水为25003000的员工。

以下查询使用大于或等于(>=)且小于或等于(<=)的比较运算符和逻辑运算符and,返回相同的结果集:

select
    employee_id,
    first_name,
    last_name,
    salary
from
    employees
where
    salary >= 2500
and salary <= 3000;

要查找薪水不在250010000范围内的所有员工,请在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;

执行上面示例代码,得到以下结果 -

3. sql between运算符使用说明

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-232019-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运算符来组合成为更复杂的查询语句。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册