参考源
- 简单教程
- 菜鸟教程
SQL between 操作符
SQL between
操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期
select column_name from table_name where column_name between value1 and value2;
注意:
不同的数据库中,between
操作符会产生不同的结果:
- 在某些数据库中,
between
选取介于两个值之间但不包括两个测试值的字段 - 在某些数据库中,
between
选取介于两个值之间且包括两个测试值的字段(MySQL
属于这个) - 在某些数据库中,
between
选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段
示例数据
CREATE DATABASE IF NOT EXISTS hardy_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
USE hardy_db;
DROP TABLE IF EXISTS lesson;
CREATE TABLE lesson (
id INT ( 11 ) NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR ( 32 ) DEFAULT '',
views INT ( 11 ) NOT NULL DEFAULT 0,
created_at TIMESTAMP
);
INSERT INTO lesson ( id, name, views, created_at )
VALUES
( 1, 'Python3 基础教程', 981, '2019-03-18 13:52:03' ),
( 2, 'JavaScript 基础教程', 73, '2019-03-18 16:03:32' ),
( 3, 'Ruby 基础教程', 199, '2019-04-01 06:16:14' ),
( 4, 'SQL 基础教程', 533, '2019-05-02 08:13:42' ),
( 5, 'Linux 基础教程', 1000, '2019-06-02 08:13:42' );
基本使用
between
操作符
-
下面的 SQL 语句选取
id
介于 1 和 3 之间的所有课程select * from lesson where id between 1 and 3;
运行结果如下:
mysql> select * from lesson where id between 1 and 3; +----+---------------------+-------+---------------------+ | id | name | views | created_at | +----+---------------------+-------+---------------------+ | 1 | Python3 基础教程 | 981 | 2019-03-18 13:52:03 | | 2 | JavaScript 基础教程 | 73 | 2019-03-18 16:03:32 | | 3 | Ruby 基础教程 | 199 | 2019-04-01 06:16:14 | +----+---------------------+-------+---------------------+ 3 rows in set (0.00 sec)
如果想要选取不在某个区间的数据,可以使用 not between
-
下面的 SQL 语句选取 id 不在 1 和 3 之间的所有课程
select * from lesson where id not between 1 and 3;
运行结果如下:
mysql> select * from lesson where id not between 1 and 3; +----+----------------+-------+---------------------+ | id | name | views | created_at | +----+----------------+-------+---------------------+ | 4 | SQL 基础教程 | 533 | 2019-05-02 08:13:42 | | 5 | Linux 基础教程 | 1000 | 2019-06-02 08:13:42 | +----+----------------+-------+---------------------+ 2 rows in set (0.00 sec)
在 VARCHAR
等文本类型上使用 between
操作符
-
下面的 SQL 语句选取
name
以介于 ‘O’ 和 ‘S’ 之间字母开始的所有课程select * from lesson where name between 'O' and 'S';
运行结果如下:
mysql> select * from lesson where name between 'O' and 'S'; +----+------------------+-------+---------------------+ | id | name | views | created_at | +----+------------------+-------+---------------------+ | 1 | Python3 基础教程 | 981 | 2019-03-18 13:52:03 | | 3 | Ruby 基础教程 | 199 | 2019-04-01 06:16:14 | +----+------------------+-------+---------------------+ 2 rows in set (0.00 sec)
在 VARCHAR
等文本类型上使用 not between
操作符
-
下面的 SQL 语句选取
name
不介于 ‘O’ 和 ‘S’ 之间字母开始的所有课程select * from lesson where name not between 'O' and 'S';
运行结果如下:
mysql> select * from lesson where name not between 'O' and 'S'; +----+---------------------+-------+---------------------+ | id | name | views | created_at | +----+---------------------+-------+---------------------+ | 2 | JavaScript 基础教程 | 73 | 2019-03-18 16:03:32 | | 4 | SQL 基础教程 | 533 | 2019-05-02 08:13:42 | | 5 | Linux 基础教程 | 1000 | 2019-06-02 08:13:42 | +----+---------------------+-------+---------------------+ 3 rows in set (0.00 sec)
在 DATETIME
等日期类型列上使用 between
操作符
-
下面的 SQL 语句选取
created_at
介于 2019-01-01 16:03:32 和 2019-12-01 06:16:14 之间的数据select * from lesson where created_at between '2019-01-01 16:03:32' and '2019-12-01 06:16:14';
运行结果如下:
mysql> select * from lesson where created_at between '2019-01-01 16:03:32' and '2019-12-01 06:16:14'; +----+---------------------+-------+---------------------+ | id | name | views | created_at | +----+---------------------+-------+---------------------+ | 1 | Python3 基础教程 | 981 | 2019-03-18 13:52:03 | | 2 | JavaScript 基础教程 | 73 | 2019-03-18 16:03:32 | | 3 | Ruby 基础教程 | 199 | 2019-04-01 06:16:14 | | 4 | SQL 基础教程 | 533 | 2019-05-02 08:13:42 | | 5 | Linux 基础教程 | 1000 | 2019-06-02 08:13:42 | +----+---------------------+-------+---------------------+ 5 rows in set (0.00 sec)
建议
一般情况下,不推荐使用 between
因为
BETWEEN
并不是所有开发者都熟悉,而且不同数据库实现有不一样的实现
我们可以用>
或<
代替,比如下面的 SQL 语句选取 id 介于 1 和 3 之间的所有课程
select * from lesson where id >= 1 and id <= 3;
运行结果如下:
mysql> select * from lesson where id >= 1 and id <= 3;
+----+---------------------+-------+---------------------+
| id | name | views | created_at |
+----+---------------------+-------+---------------------+
| 1 | Python3 基础教程 | 981 | 2019-03-18 13:52:03 |
| 2 | JavaScript 基础教程 | 73 | 2019-03-18 16:03:32 |
| 3 | Ruby 基础教程 | 199 | 2019-04-01 06:16:14 |
+----+---------------------+-------+---------------------+
3 rows in set (0.00 sec)
效果是一样的。