mysql 中的 between … and … 语法,相信大家都会,但是在边界这个细节上一不留神就可能会出错。下面就以一个简单的例子去理解边界性的问题。

  1. 首先我们建一个简单的用户表,简单到只有一个 age 和 name 字段(其实可以没有),下面是建表语句

    1
    2
    3
    4
    5
    6
    7
    8
    create table t_user
    (
    age int null,
    name varchar(30) null
    )
    engine=InnoDB
    ;

  2. 插入几条测试语句

    1
    2
    3
    4
    5
    INSERT INTO mytest.t_user (age, name) VALUES (15, 'kiwi');
    INSERT INTO mytest.t_user (age, name) VALUES (17, 'kimi');
    INSERT INTO mytest.t_user (age, name) VALUES (18, 'tony');
    INSERT INTO mytest.t_user (age, name) VALUES (23, 'kim');
    INSERT INTO mytest.t_user (age, name) VALUES (25, 'tom');
  3. 执行完插入语句后,表应该是如下这样

  4. 准备工作已经做完了,我们先执行一下 between and 语句

    1
    SELECT * FROM t_user WHERE age BETWEEN 17 AND 23;
    • 执行结果如下
    • 分析

      可见结果是包含边界的,在这里也就是包含 17 与 23,相当于如下 sql ,
      SELECT * FROM t_user WHERE age >= 17 AND age <= 23;

  5. 我们接着执行 not between and 语句

    1
    SELECT * FROM t_user WHERE age NOT BETWEEN 17 AND 23; 
    • 执行结果如下
      • 分析

        可见结果是不包含边界的,在这里也就是 17 与 23 不在检索条件内,相当于如下 sql ,
        SELECT * FROM t_user WHERE age < 17 OR age > 23;

  6. 最终结论

    1. between … and … 是包含边界的,相当于 … >= AND <= … ,很容易以为是大于并且小于边界的
    2. not between … and … 是不包含边界的,相当于 … > OR < …,这里可以理解为是 between … and 的否命题

本文地址 https://blog.coder4j.cn/posts/77226281/