BETWEEN匹配范围中所有的值,包括指定的开始值和结束值,这些值可以是数值、文本或者日期
语法格式
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
练习案例数据1
DROP TABLE IF EXISTS purchase_info;
CREATE TABLE purchase_info(
commodity_id VARCHAR(8),
category VARCHAR(16),
colour VARCHAR(16),
purchase_quantity INT,
purchase_date DATE
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
INSERT INTO
purchase_info
(commodity_id,category,colour,purchase_quantity,purchase_date)
VALUE ('c001','clothing','black',150,'2022-04-25')
,('c002','clothing','white',50,'2022-04-05')
,('c003','shoes','white',500,'2022-03-23')
,('c004','shoes','red',200,'2022-04-07')
,('c005','clothing','blue',120,'2022-04-15');
purchase_info表
问题1:查询采购日期在2022年4月1日到2020年4月30日(包括边界日期)的商品记录
SELECT *
FROM purchase_info
WHERE purchase_date >= '2022-04-01'
AND purchase_date <= '2022-04-30';
上述代码可用BETWEEN关键字进行简化,代码如下所示:
SELECT *
FROM purchase_info
WHERE purchase_date BETWEEN '2022-04-01' AND '2022-04-30';
结果展示:
BETWEEN操作符,它需要两个值,即范围的开始值和结束值,可简化取值范围的书写,两端均包含(两个值必须用AND关键字分隔)
问题2:查询采购数量在100到200的商品记录
SELECT *
FROM purchase_info
WHERE purchase_quantity BETWEEN 100 AND 200;
结果展示:
BETWEEN通常用于将取值限制在某个区间内,除了日期,还可以用于数值
注意:在使用BETWEEN时,需要注意的是,在查询精确到秒时,容易出现使用错误
练习案例数据2
DROP TABLE IF EXISTS purchase_time;
CREATE TABLE purchase_time(
commodity_id VARCHAR(8),
purchase_date DATETIME
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
INSERT INTO
purchase_time (commodity_id,purchase_date)
VALUE ('c001','2022-04-25 14:13:38')
,('c002','2022-04-05 09:12:03')
,('c003','2022-03-23 18:00:19')
,('c004','2022-04-30 12:23:01')
,('c005','2022-05-01 08:12:41');
purchase_time表
问题3:查询2022年4月10日到2022年4月30日的所有记录
SELECT *
FROM purchase_time
WHERE purchase_date BETWEEN '2022-04-10' AND '2022-04-30';
结果展示:
仔细观察原始数据表和查询结果,发现查询结果并不包含'2022-04-30 12:23:01'那条记录,因为BETWEEN的AND后连接的日期是限制到日的,则默认为00:00:00,所以这里右侧查询的边界值为'2022-04-30 00:00:00',即不包含12:23:01的那条记录
如果需要精确查询日期,则需要将上述代码修改为如下形式:
SELECT *
FROM purchase_time
WHERE purchase_date BETWEEN '2022-04-10 00:00:00' AND '2022-04-30 23:59:59';
结果展示:
WHERE purchase_date BETWEEN '2022-04-10 00:00:00' AND '2022-04-30 23:59:59'
将日期的查询精确到秒,即可查询到想要的结果