• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    解决从集合运算到mysql的not like找不出NULL的问题

    记一次有趣的发现:

    有一个表,总记录数是1000条,现在有一条查询语句:

    #查询语句1
    #找出表中id中含有‘A'或‘B'或‘C'的字段
    select * from table1 where id like '%A%' or id like '%B%' or id like '%C%' ;
    #成功查出300条

    嗯查询正常,有300条记录呢。

    然后我随便再敲一次查询语句…:

    #查询语句2
    #找出表中id中不含有‘A'且不含有‘B'且不含有‘C'的字段
    select * from table1 where id not like '%A%' and id not like '%B%' and id not like '%C%' ;
    #成功查出400条

    嗯查出了400条呢…什么?!只有400条??不是应该700条吗!!!

    我如雷轰顶——哪里不对了??

    按道理,“找出表中id中含有‘A'或‘B'或‘C'的字段” 应该等价于 “找出表中id中不含有‘A'且不含有‘B'且不含有‘C'的字段” 的啊!这是由集合运算决定的啊!

    “找出表中id中含有‘A'或‘B'或‘C'的字段”>>看作>> A∪B∪C

    “找出表中id中不含有‘A'且不含有‘B'且不含有‘C'的字段”>>看作>> ∁UA∩∁UB∩∁UC

    然而我们根据运算规则可知:∁U(A∪B∪C) = ∁UA ∩ ∁UB ∩ ∁UC

    那就也是说,两条查询语句查出来的结果,不应该是互补的吗??理论上行数相加应该等于1000的呀,那现在怎么缺了300条呢?

    奇了怪了。到底哪里错了呢??

    于是换一条查询语句:

    #查询语句3
    #找出表中id中不含有‘A'或‘B'或‘C'的字段
    select * from table1 where id not in (select * from table1 where id like '%A%' or id like '%B%' or id like '%C%' );
    #成功查出700条

    咦??怎么这样查,才是查询语句1的互补集呢?

    我将查询语句2和查询语句3得到的结果一比较,发现:原来缺少的300条记录,是id 为NULL的情况!

    也就是说,not like ‘%A%' 是不能查出NULL的记录的!

    经过了解,发现:

    又发现了一个细节知识~

    补充:注意mysql的not in查询值中存在null值时返回的查询结果会一直为空

    现在有数据库表是

    当我们使用这样的查询语句时:

    select * from user
    where username not in 
    (
    select username 
    from user
    where id != 2
    )

    这时子查询的结果包含了null值,所以结果会一直返回空查询,而不会返回预期的id为2这一行

    我们可以稍微修改一下查询形式:

    select * from user
    where username not in 
    (
    select username 
    from user
    where id != 2 and username is not null
    )

    这时排除了username为空的列,就可以得到预期的结果了

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • 为什么mysql字段要使用NOT NULL
    • 解决mysql使用not in 包含null值的问题
    • MySQL null与not null和null与空值''''''''的区别详解
    • MySQL中建表时可空(NULL)和非空(NOT NULL)的用法详解
    • MySQL中NOT IN填坑之列为null的问题解决
    • MySQL中可为空的字段设置为NULL还是NOT NULL
    • MySQL查询空字段或非空字段(is null和not null)
    • mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录
    • MySQL非空约束(not null)案例讲解
    上一篇:使用mysql记录从url返回的http GET请求数据操作
    下一篇:解决mysql使用not in 包含null值的问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    解决从集合运算到mysql的not like找不出NULL的问题 解决,从,集合,运算,到,mysql,