mysql中between语句如何使用

来源:这里教程网 时间:2026-02-28 20:06:57 作者:

mysql中between语句如何使用

MySQL中的

BETWEEN
语句,说白了,就是用来判断一个值是否落在你指定的两个边界值之间,而且这两个边界值本身也是包含在内的。它让范围查询变得异常简洁和直观,省去了写一堆
大于等于
小于等于
的麻烦。

解决方案:

BETWEEN
语句的基本用法非常直接,它通常用在
WHERE
子句中,用来筛选满足特定范围条件的数据行。

语法结构是这样的:

SELECT 列名 FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2;

这里,

值1
是范围的起始点,
值2
是范围的结束点。重要的是,
值1
值2
这两个边界值都会被包含在查询结果中。

举个例子,假设我们有一个

products
表,里面有
price
(价格)字段:

-- 查找价格在10到50之间的产品(包含10和50)
SELECT product_name, price
FROM products
WHERE price BETWEEN 10.00 AND 50.00;

这个查询会返回所有价格大于等于10且小于等于50的产品。在我看来,这种写法比

WHERE price >= 10.00 AND price <= 50.00
要清晰得多,尤其是在条件比较多的时候,可读性优势会更明显。

BETWEEN
AND
运算符如何协同工作?

这其实是个很有意思的问题,因为

BETWEEN
语句本身就内含了一个
AND
的逻辑。当我们写
WHERE column BETWEEN value1 AND value2
时,MySQL在底层实际上是将其解析为
WHERE column >= value1 AND column <= value2
。所以,从功能上讲,它们是等价的。

我个人觉得

BETWEEN
最大的价值在于其语义上的简洁。它把一个常见的“在...之间”的逻辑封装起来,让SQL语句读起来更像自然语言。想象一下,如果你要查询一个日期范围,比如从2023年1月1日到2023年1月31日的数据,用
BETWEEN '2023-01-01' AND '2023-01-31'
就比
date_column >= '2023-01-01' AND date_column <= '2023-01-31'
要舒服得多。

然而,这并不意味着

AND
运算符就没用了。在更复杂的查询中,你可能需要将多个
BETWEEN
条件与其他
AND
OR
条件结合起来。比如:

-- 查找价格在10到50之间,并且库存量大于100的产品
SELECT product_name, price, stock_quantity
FROM products
WHERE price BETWEEN 10.00 AND 50.00
  AND stock_quantity > 100;

在这种情况下,

BETWEEN
处理一个范围,而外层的
AND
则用来连接这个范围条件和另一个独立的条件。它们是互补的,而不是互相替代的关系。

BETWEEN
能否用于日期、字符串或数字类型的数据?

当然可以!

BETWEEN
语句的灵活性是它的一大亮点,它不仅限于数字类型,还能很好地应用于日期和字符串类型的数据。这在我日常的数据分析工作中,简直是不可或缺的工具。

    数字类型 (Numeric Data): 这是最常见的用法,就像我们上面看到的例子。无论是整数、浮点数还是小数,

    BETWEEN
    都能准确地判断它们是否在指定范围内。

    -- 查找年龄在18到30岁之间的用户
    SELECT user_name, age
    FROM users
    WHERE age BETWEEN 18 AND 30;

    日期和时间类型 (Date and Time Data): 在处理日期和时间数据时,

    BETWEEN
    尤其方便。它会根据日期时间的顺序进行比较。

    -- 查找在2023年1月1日到2023年1月31日之间创建的订单
    SELECT order_id, order_date
    FROM orders
    WHERE order_date BETWEEN '2023-01-01' AND '2023-01-31';

    这里有个小坑,如果

    order_date
    字段是
    DATETIME
    类型,并且你只提供了日期部分,那么
    '2023-01-31'
    会被隐式地处理为
    '2023-01-31 00:00:00'
    。这意味着,2023年1月31日当天所有在00:00:00之后的数据都不会被包含在内。为了避免这种遗漏,我通常会把结束日期的时间部分设置为
    '23:59:59'
    来确保包含整个一天:

    -- 包含2023年1月31日全天的数据
    SELECT order_id, order_date
    FROM orders
    WHERE order_date BETWEEN '2023-01-01 00:00:00' AND '2023-01-31 23:59:59';

    字符串类型 (String Data):

    BETWEEN
    也可以用于字符串,它会根据字符集的排序规则(collation)进行字典顺序比较。

    -- 查找名字以'A'开头到'C'开头的用户(例如 'Alice' 到 'Chris')
    SELECT user_name
    FROM users
    WHERE user_name BETWEEN 'A' AND 'C';

    这里需要注意,

    'C'
    会包含所有以
    'C'
    开头,但小于
    'D'
    的字符串。例如,
    'Cynthia'
    会被包含,但
    'Damon'
    就不会。如果你的数据是大小写敏感的,那么
    'a'
    'a'
    的排序位置会有所不同,这取决于你的数据库或列的
    collation
    设置。我个人在使用字符串
    BETWEEN
    时会格外小心,确保对排序规则有清晰的认知,避免产生意外的结果。

使用
NOT BETWEEN
如何排除指定范围?

既然

BETWEEN
是用来包含指定范围的,那么很自然地,MySQL也提供了
NOT BETWEEN
来做相反的事情——排除指定范围的数据。这在很多场景下都非常有用,比如你想找出那些不在某个特定年龄段、不在某个日期区间或者不在某个价格范围内的记录。

它的语法和

BETWEEN
非常相似,只是前面加了一个
NOT
SELECT 列名 FROM 表名 WHERE 列名 NOT BETWEEN 值1 AND 值2;

这意味着查询会返回所有值小于

值1
或者大于
值2
的行。同样,
值1
值2
这两个边界值也会被排除在外。

我们还是用

products
表的例子:

-- 查找价格不在10到50之间的产品(即价格小于10或大于50的产品)
SELECT product_name, price
FROM products
WHERE price NOT BETWEEN 10.00 AND 50.00;

这个查询会返回所有价格小于10或者价格大于50的产品。它等价于

WHERE price < 10.00 OR price > 50.00

我经常用

NOT BETWEEN
来快速筛选出“异常”数据或者需要特别关注的边缘数据。比如,在一个销售数据表中,我想找出那些销售额不在常规区间(比如100到10000)的订单,
NOT BETWEEN
就能派上大用场,帮助我迅速定位到可能需要人工审核的极高或极低的销售额订单。它提供了一种简洁明了的方式来表达“不在...范围之内”的逻辑,避免了写复杂的
OR
条件。

相关推荐