MySQL比较函数:IN() 一个值是否在一组值内

IN():一个值是否在一组值内

 

expr IN (value,...)

返回1(真),如果 expr等于任何的值的IN()列表,否则返回 0(假)。

如果IN()列表中的值不需要类型转换,则它们都是JSON相同类型的非常量, expr可以将它们与每个相同类型的值进行比较(可能在类型转换之后),从而进行优化。列表中的值被排序,并且 expr使用二进制搜索来完成搜索,这使得IN()操作非常快。

 

用法示例:

mysql> SELECT 2 IN (0,3,5,7);
        -> 0
mysql> SELECT 'wefwf' IN ('wee','wefwf','weg');
        -> 1

 

IN() 可以用来比较行构造函数:

mysql> SELECT (3,4) IN ((1,2), (3,4));
        -> 1
mysql> SELECT (3,4) IN ((1,2), (3,5));
        -> 0

 

绝对不要在IN()列表中混合带引号和不带引号的值, 因为带引号(例如字符串)和不带引号的值(例如数字)的比较规则不同。因此,混合类型可能导致不一致的结果。例如,不要写这样的 IN()表达式:

SELECT val1 FROM tbl1 WHERE val1 IN (1,2,'a');

而是这样写:

SELECT val1 FROM tbl1 WHERE val1 IN ('1','2','a');

 

隐式类型转换可能会产生非直观的结果:

mysql> SELECT 'a' IN (0), 0 IN ('b');
        -> 1, 1

 

在这两种情况下,比较值都将转换为浮点值,在每种情况下均得出0.0,比较结果为1(真)。

IN()列表 中值的数量仅受该max_allowed_packet值限制 。

为了符合SQL标准,不仅IN() 返回NULL左侧表达式为NULL,还返回列表中未找到匹配项,并且列表中的一个表达式为时返回NULL。

IN()语法也可以用于编写某些类型的子查询。

    A+
发布日期:2020年08月25日 16:08:36  所属分类:mysql函数
最后更新时间:2020-08-25 16:08:36
付杰
  • ¥ 69.0元
  • 市场价:99.0元
  • ¥ 999元
  • 市场价:4999元
  • ¥ 298.0元
  • 市场价:398.0元
  • ¥ 99.0元
  • 市场价:129.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: