当前位置:网站首页> mysqlbetween实现选取介于两个值之间的数据范围
mysqlbetween实现选取介于两个值之间的数据范围
2022-07-03 12:12:00 【1024问】
BETWEEN 实例
BETWEEN 时间日期
BETWEEN 数据比较
MySQL IN 用法
1.IN 运算符用于WHERE 表达式中
2.IN 子查询
3.IN 运算符补充说明
4.关于 IN 运算符的效率问题
between和in的区别
BETWEEN 运算符用于 WHERE 表达式中,选取介于两个值之间的数据范围。
BETWEEN 同 AND 一起搭配使用,语法如下:
WHERE column BETWEEN value1 AND value2WHERE column NOT BETWEEN value1 AND value2通常 value1 应该小于 value2。当 BETWEEN 前面加上 NOT 运算符时,表示与 BETWEEN 相反的意思,即选取这个范围之外的值。
BETWEEN 实例选取 uid 在 2 到 5 之间的用户数据:
SELECT * FROM user WHERE uid BETWEEN 2 AND 5BETWEEN 时间日期BETWEEN AND 常用于检索时间或日期段内的内容,下面是一些常见的 BETWEEN 时间日期例子:
// int 时间戳格式,查询 2008-08-08 20:00:00 到 2009-01-01 零点之前的数据SELECT * FROM table WHERE column_time BETWEEN 1218196800 AND 1230739199// DATE 格式,查询 2008-08-08 到 2009-01-01 零点之前的数据SELECT * FROM table WHERE column_time BETWEEN '2008-08-08' AND '2009-01-01'// DATETIME 格式,查询 2008-08-08 20:00:00 到 2009-01-01 零点之前的数据SELECT * FROM table WHERE column_time BETWEEN '2008-08-08 20:00:00' AND '2008-12-31 23:59:59'但对于查询到当前时间的数据,建议使用 >= 运算符:
// DATETIME 格式,查询 2008-08-08 20:00:00 到当前时刻的数据SELECT * FROM table WHERE column_time >= '2008-08-08 20:00:00'可见,同样的需求,不同的字段类型,写法可能就不一样。int 时间戳格式效率最优。
以上 BETWEEN 的各个例子,虽然都是 SELECT 查询,但 BETWEEN 也可以用于 UPDATE、DELETE 等适用 WHERE 表达式的 SQL 中。
BETWEEN 数据比较BETWEEN 还具有数据比较功能,语法如下:
expr BETWEEN min AND max当 expr 表达式的值大于或等于 min 且小于或等于 max 时, BETWEEN 的返回值为 1 ,否则返回 0 。
利用这个功能,可以判断一个表达式或值否则在某个区间:
// 返回 0SELECT 1 BETWEEN 2 AND 3// 返回 1SELECT 'b' BETWEEN 'a' AND 'c'// 判断日期范围SELECT 20080808 BETWEEN 20080101 AND 20090101BETWEEN 与 <、<=、>=、> 等运算符在某些情况下有着类似的功能,但 BETWEEN 运算级别更高且效率上更甚一筹。
当然由于 BETWEEN 存在边界值的问题而不够灵活,因此不同的情况,采用何种运算符,需要具体对待。
MySQL IN 用法1.IN 运算符用于WHERE 表达式中以列表项的形式支持多个选择,语法如下:
WHERE column IN (value1,value2,...)WHERE column NOT IN (value1,value2,...)当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择。
IN 使用实例
选取 uid 为 2、3、5 的用户数据:
SELECT * FROM user WHERE uid IN (2,3,5)2.IN 子查询更多情况下,IN 列表项的值是不明确的,而可能是通过一个子查询得到的:
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0)在这个 SQL 例子里,我们实现了查出所有状态为 0 的用户(可能是被禁止)的所有文章。首先通过一个查询得到所有所有 status=0 的用户:
SELECT uid FROM user WHERE status=0然后将查询结果作为 IN 的列表项以实现最终的查询结果,注意在子查询中返回的结果必须是一个字段列表项。
3.IN 运算符补充说明IN 列表项不仅支持数字,也支持字符甚至时间日期类型等,并且可以将这些不同类型的数据项混合排列而无须跟 column 的类型保持一致:
SELECT * FROM user WHERE uid IN(1,2,'3','c')一个 IN 只能对一个字段进行范围比对,如果要指定更多字段,可以使用 AND 或 OR 逻辑运算符:
SELECT * FROM user WHERE uid IN(1,2) OR username IN('admin','5idev')使用 AND 或 OR 逻辑运算符后,IN 还可以和其他如 LIKE、>=、= 等运算符一起使用。
4.关于 IN 运算符的效率问题如果 IN 的列表项是确定的,那么可以用多个 OR 来代替:
SELECT * FROM user WHERE uid IN (2,3,5)// 等效为:SELECT * FROM user WHERE (uid=2 OR aid=3 OR aid=5)一般认为,如果是对索引字段进行操作,使用 OR 效率高于 IN,但对于列表项不确定的时候(如需要子查询得到结果),就必须使用 IN 运算符。另外,对于子查询表数据小于主查询的时候,也是适用 IN 运算符的。
between和in的区别如果要让选择的结果在某一个范围之内的话可以用between和in这两个关键字。大多数情况下二者的反映都是一样的,但是如果为空的情况就不一样了。如下:
WHERE vbeln BETWEEN pa_vb_s AND pa_vb_e. WHERE VBELN IN pa_vb.他们的定义如下:
SELECT-OPTIONS pa_vb FOR vbrk-vbeln.PARAMETERS: pa_vb_s TYPE vbeln, pa_vb_e TYPE VBELN.如果他们都为空的话,between会限制select语句让它一条记录都无法选出来,但是in的话则相反,这个限制条件不会起任何作用,会选择出所有的记录。这是二者最大的区别。
但是有一个小小的陷阱,ranges变量和select-options感觉上时相同的。但是在用select语句的时候表现会不同。代码如下:
PARAMETERS: pa_vb_s TYPE vbeln, pa_vb_e TYPE VBELN. ranges pa_vb for VBRK-vbeln. pa_vb-sign = 'I'. pa_vb-option = 'BT'. PA_VB-LOW = PA_VB_S. PA_VB-HIGH = PA_VB_E. APPEND pa_vb.此时如果用刚才的select语句用in去限制的话,也会一条都选不出来!这里起初不明白为什么会这样,跟踪程序发现就在append这句话。
如果用selct-options这句,在选择框里什么都不填的话,那么select-options这个ragnes变量里面是空值,就是内表记录数是0!相当于没有append。
但是我们自定义ragnes变量的时候会append空值,即使没有输入。
这样就和between的功效一样了。要想和selct-options的作用一样这样写就可以了。
IF PA_VB_S IS NOT INITIAL or PA_VB_E IS NOT INITIAL. APPEND pa_vb. ENDIF.以上为个人经验,希望能给大家一个参考,也希望大家多多支持软件开发网。
边栏推荐
- Export the entire Oracle Database
- Grid connection - Analysis of low voltage ride through and island coexistence
- (最新版) Wifi分销多开版+安装框架
- T430 toss and install OS majave 10.14
- Harmonic current detection based on synchronous coordinate transformation
- [exercise 7] [Database Principle]
- Leetcode234 palindrome linked list
- ncnn神經網絡計算框架在香柳丁派OrangePi 3 LTS開發板中的使用介紹
- Xctf mobile--app1 problem solving
- Public and private account sending prompt information (user microservice -- message microservice)
猜你喜欢

最新版盲盒商城thinkphp+uniapp
![[network counting] Chapter 3 data link layer (2) flow control and reliable transmission, stop waiting protocol, backward n frame protocol (GBN), selective retransmission protocol (SR)](/img/45/c2d7934b886d8090373ca9e6e23c97.gif)
[network counting] Chapter 3 data link layer (2) flow control and reliable transmission, stop waiting protocol, backward n frame protocol (GBN), selective retransmission protocol (SR)

Grid connection - Analysis of low voltage ride through and island coexistence

Use Tencent cloud IOT platform to connect custom esp8266 IOT devices (realized by Tencent continuous control switch)
![[data mining review questions]](/img/96/00f866135e06c4cc0d765c6e499b29.png)
[data mining review questions]

Togaf certification self-study classic v2.0

Swift bit operation exercise

【Colab】【使用外部数据的7种方法】

Ali & ant self developed IDE

01 three solutions to knapsack problem (greedy dynamic programming branch gauge)
随机推荐
Create a dojo progress bar programmatically: Dojo ProgressBar
低代码平台国际化多语言(i18n)技术方案
ncnn神经网络计算框架在香橙派OrangePi 3 LTS开发板中的使用介绍
Using swift language features, write a pseudo-random number generator casually
Swift return type is a function of function
社交社区论坛APP超高颜值UI界面
CVPR 2022 图像恢复论文
Quick learning 1.8 front and rear interfaces
Powerful avatar making artifact wechat applet
Enable SASL authentication for memcached
Swift5.7 扩展 some 到泛型参数
对业务的一些思考
Solve the problem of VI opening files with ^m at the end
基于同步坐标变换的谐波电流检测
[combinatorics] permutation and combination (multiple set permutation | multiple set full permutation | multiple set incomplete permutation all elements have a repetition greater than the permutation
Tianyi ty1208-z brush machine detailed tutorial (free to remove)
How to convert a decimal number to binary in swift
最新版抽奖盲盒运营版
Glide question you cannot start a load for a destroyed activity
[comprehensive question] [Database Principle]