mysql中between的用法及说明

 更新时间:2023年07月28日 09:53:09   作者:有梦想的攻城狮  
这篇文章主要介绍了mysql中between的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

关于between的使用

between的介绍

日常sql查询过程中经常要筛选某个属性或某个表达式结果的某个范围内的数据,这个时候我们经常通过 > 或者 < 来进行筛选,有的时候再项目中由于 >< 经常会和起始标志符冲突,所以需要进行转义,这个过程很容易出现一些问题,其实在sql的关键字中,有一个非常实用的关键字可以进行范围查询,这个关键字就是between,接下来我们就来深入的了解一下between的用法。

between的语法

between关键字是一个逻辑操作符用来筛选指定属性或表达式某一范围内或范围外的数据。

between关键字常用在where关键字后与selectupdatedelete共同使用。

between的使用语法如下:

expr [NOT] BETWEEN begin_expr AND end_expr;

在整个表达式中,expr表示的是一个单一的属性或者是一个计算的表达式,整个表达式中的三个参数 expr、begin_expr、end_expr 必须是同一种数据类型。

  • between筛选的是 expr >= begin_expr并且 expr <= end_expr 的数据,如果不存在则返回的是0;
  • not between筛选的是 expr < begin_expr或者 expr > end_expr 的数据,如果不存在则返回的是0;
  • 如果 expr 返回的是 NULL,则between 也返回的是null (暂未验证)

between的用法

假如我们有一张数据库表如下所示

CREATE TABLE `t_income` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '唯一自增id',
  `income_date` varchar(255) NOT NULL COMMENT '收入年月',
  `amount` float NOT NULL COMMENT '收入金额',
  `target_amount` float NOT NULL DEFAULT '0' COMMENT '目标收入',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)  ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

查询表中amount>=10并且amount<=50的数据

select * from t_income where amount between 10 and 50;

查询表中amount 和 target_amount 总和 >=100并且<=500的数据

select * from t_income where (amount + target_amount) between 100 and 500;

查询表中create_time 在 2019-01-01 到 2019-09-01 这个日期范围内的数据

select * from t_income where create_time between cast('2019-01-01' as DATE) and cast('2019-09-01' as DATE);

查询表中amount < 10 或者 amount > 50 的数据

select * from t_income where amount not between 10 and 50;

between的总结

通过上面的讲解,我们现在应该已经基本的学会了between的用法,但是如果在开发中,我们要查询某个属性大于某一个值 并且小于某个值的话,我们就只能用 > and <

mysql中的between边界问题

between在不同的SQL中有不同的边界包含问题,查了下mysql官网对于between的解释。

在mysql中,between A and B 等同于表达式 >= A and <= B

官网地址:MySQL官网对于between的解释

mysql中,当对日期时间之类的字段进行比较时,需要注意几个点:

1.字段类型是date,年月日,类似‘2022-08-08’,between ‘2022-01-01’ and ‘2022-02-02’ 的查询结果包括’2022-01-01’和’2022-02-02’

2.字段类型是datetime,年月日时分秒,类似‘2022-08-08 08:08:08’,若要查询2022年1月1号(包含)到2022年2月2号(包含)的数据,使用between ‘2022-01-01 00:00:00’ and ‘2022-02-02 23:59:59’,不要使用between ‘2022-01-01’ and ‘2022-02-03’,因为这句相当于between ‘2022-01-01 00:00:00’ and ‘2022-02-03 00:00:00’,会将 '2022-02-03 00:00:00’的数据也查询到

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql中sql查询性能分析和配置优化全面攻略

    mysql中sql查询性能分析和配置优化全面攻略

    处理Mysql性能上的问题,可以利用一些Linux常用的命令来查看Mysql对服务器的CUP和I/O使用情况,通过慢查询日志找出有待优化的sql,通过show processlist查看正在执行的sql的情况以及及时kill死锁的sql,通过EXPLAIN分析需要优化的sql语句,对Mysql内部配置做一些调整
    2024-03-03
  • MySQL中使用PROFILING来查看SQL执行流程的实现步骤

    MySQL中使用PROFILING来查看SQL执行流程的实现步骤

    在MySQL中,PROFILING功能提供了一种方式来分析SQL语句的执行时间,包括查询执行的各个阶段,如发送、解析、优化、执行等,这对于诊断性能问题非常有用,本文给大家介绍了MySQL中使用PROFILING来查看SQL执行流程的实现步骤,需要的朋友可以参考下
    2024-07-07
  • Mysql主从同步备份策略分享

    Mysql主从同步备份策略分享

    主从服务器上的MySQL数据库版本同为5.1.34
    2011-05-05
  • MySQL下使用Inplace和Online方式创建索引的教程

    MySQL下使用Inplace和Online方式创建索引的教程

    这篇文章主要介绍了MySQL下使用Inplace和Online方式创建索引的教程,针对InnoDB为存储引擎的情况,需要的朋友可以参考下
    2015-11-11
  • SQLServer 2005 自动备份数据库的方法分享(附图解教程)

    SQLServer 2005 自动备份数据库的方法分享(附图解教程)

    SQLServer 2005 自动备份数据库的方法分享(附图解教程),使用sqlserver2005的朋友可以参考下。
    2011-09-09
  • MySQL数据表使用的SQL语句整理

    MySQL数据表使用的SQL语句整理

    这篇文章主要介绍了MySQL数据表使用的SQL语句整理,文章基于MySQL的相关资料展开举例说明,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 详解MySQL中concat函数的用法(连接字符串)

    详解MySQL中concat函数的用法(连接字符串)

    本篇文章主要介绍了MySQL中concat函数的用法(连接字符串),在命令行模式下进行测试。具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • CentOS7下二进制安装mysql 5.7.23

    CentOS7下二进制安装mysql 5.7.23

    这篇文章主要为大家详细介绍了CentOS7下二进制安装mysql 5.7.23,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • MySQL中复合索引和覆盖索引的区别详解

    MySQL中复合索引和覆盖索引的区别详解

    这篇文章主要介绍了MySQL中复合索引和覆盖索引的区别详解,复合索引是一种索引,它包含多个字段,复合索引能够使一个SQL查询多个条件时也能走索引,提高查询性能,需要的朋友可以参考下
    2023-11-11
  • MySQL虚拟列的使用示例

    MySQL虚拟列的使用示例

    虚拟列是MySQL中的一种特殊列,它不存储在表中,而是在查询时动态计算生成,虚拟列可以提高查询效率、减少存储需求、确保数据一致性、简化查询和保护敏感数据,感兴趣的可以了解一下
    2024-11-11

最新评论