您的位置:首页 > 数据库 > > 正文

mysql中的null和空值的区别(解决mysql使用not in 包含null值的问题)

更多 时间:2022-01-17 01:47:56 类别:数据库 浏览量:2750

mysql中的null和空值的区别

解决mysql使用not in 包含null值的问题

注意!!!

  • ?
  • 1
  • select * from user where uid not in (a,b,c,null);
  • 这个sql不回返回任何结果。要避免not in的list中出现null的情况。

    另外:

    –如果null参与算术运算,则该算术表达式的值为null。(例如:+,-,*,/ 加减乘除)

    –如果null参与比较运算,则结果可视为false。(例如:>=,<=,<> 大于,小于,不等于)

    –如果null参与聚集运算,则聚集函数都置为null(使用isnull(字段,0)等方式可以避免这种情况)。除count(*), count(1), count(0)等之外(count(字段) 字段为null的行不参与计数)。

    --如果在not in子查询中有null值的时候,则不会返回数据。

    补充:MySQL in,not in,exists,not exists与null的恩恩怨怨

    null这个东西在数据里算是个奇葩,在比较中也比较特殊,下面记录总结一下在in,not in,exists,not exists中null对判断结果的影响。

    做一些描述声明,在比较符左边的我们称为左比较符,在比较符右边的我们称为右比较符,例如1 in (1,2),那么in左边的1是左比较符,in右边的(1,2)是右比较符。

    1.i​n

    1.1当左比较符是null,任何情况下都返回null。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • mysql> select null in (1,2);
  • +---------------+
  • | null in (1,2) |
  • +---------------+
  • |   NULL |
  • +---------------+
  • 1 row in set (0.00 sec)
  •  
  • mysql> select null in (1,2,null);
  • +--------------------+
  • | null in (1,2,null) |
  • +--------------------+
  • |    NULL |
  • +--------------------+
  • 1 row in set (0.00 sec)
  • 1.2当右比较符包含null,只当左比较符不为null,且右比较符包含左比较符时,返回1,其他情况均返回null。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • mysql> select null in (1,2,null);
  • +--------------------+
  • | null in (1,2,null) |
  • +--------------------+
  • |    NULL |
  • +--------------------+
  • 1 row in set (0.00 sec)
  •  
  • mysql> select 3 in (1,2,null);
  • +-----------------+
  • | 3 in (1,2,null) |
  • +-----------------+
  • |   NULL |
  • +-----------------+
  • 1 row in set (0.00 sec)
  •  
  • mysql> select 1 in (1,2,null);
  • +-----------------+
  • | 1 in (1,2,null) |
  • +-----------------+
  • |    1 |
  • +-----------------+
  • 1 row in set (0.00 sec)
  • 2.not in

    2.1当左比较符为null,任何情况都返回null。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • mysql> select null not in (1,2,null);
  • +------------------------+
  • | null not in (1,2,null) |
  • +------------------------+
  • |     NULL |
  • +------------------------+
  • 1 row in set (0.00 sec)
  •  
  • mysql> select null not in (1,2);
  • +-------------------+
  • | null not in (1,2) |
  • +-------------------+
  • |    NULL |
  • +-------------------+
  • 1 row in set (0.00 sec)
  • 2.2当右比较符包含null,当右比较符包含左比较符时返回0,其他情况均返回null。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • mysql> select 1 not in (1,2,null);
  • +---------------------+
  • | 1 not in (1,2,null) |
  • +---------------------+
  • |     0 |
  • +---------------------+
  • 1 row in set (0.00 sec)
  •  
  • mysql> select 1 not in (2,3,null);
  • +---------------------+
  • | 1 not in (2,3,null) |
  • +---------------------+
  • |    NULL |
  • +---------------------+
  • 1 row in set (0.00 sec)
  • 3.exists

    exists子查询返回null时判断为真。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • mysql> select exists (select null);
  • +----------------------+
  • | exists (select null) |
  • +----------------------+
  • |     1 |
  • +----------------------+
  • 1 row in set (0.00 sec)
  • 4.not exists

    not exists子查询返回null时判断为假。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • mysql> select not exists (select null);
  • +--------------------------+
  • | not exists (select null) |
  • +--------------------------+
  • |      0 |
  • +--------------------------+
  • 1 row in set (0.00 sec)
  • 以上为个人经验,希望能给大家一个参考,也希望大家多多支持开心学习网。如有错误或未考虑完全的地方,望不吝赐教。

    原文链接:https://blog.csdn.net/weixin_39724194/article/details/105978548

    标签:mysql NULL NOT IN
    您可能感兴趣