当前位置: 首页 > 面试题库 >

MySQL比较具有空值

劳亦
2023-03-14
问题内容

我在MySQL表中有一个名为CODE的列,该列可以为NULL。假设我有一些带有CODE
=’C’的行,我想在选择的结果集中忽略它们。我的结果集中可以有CODE = NULL或CODE!=’C’。

以下查询不返回CODE为NULL的行:

SELECT * from TABLE where CODE!='C'

但是此查询按预期工作,我知道这是正确的方法。

SELECT * from TABLE where CODE IS NULL OR CODE!='C'

我的问题是为什么只有CODE!=’C’不会返回CODE = NULL的行?绝对“
C”不是NULL。我们在这里将无值与字符进行比较。有人可以解释一下为什么它不能那样工作吗?


问题答案:

在MySQL中,NULL与没有值相反,它被视为“缺少的未知值”。看一下有关NULL的MySQL参考。

与的任何算术比较NULL都不会返回true或false,而是返回NULL.。因此,NULL != 'C'返回NULL,而不是返回true。

与“ NULL”的任何算术比较将返回false。要在SQL中进行检查:

SELECT IF(NULL=123,'true','false')

要检查NULL值,我们需要使用IS NULLIS NOT NULL运算符。



 类似资料:
  • 问题内容: 我们有一些代码根据其坐标之间的距离对地址列表进行排序。这是通过使用自定义比较器的collections.sort完成的。 但是,列表中有时不包含地址,这会导致NullPointerException。解决这个问题的最初想法是让比较器返回至少0个坐标为零的地址的距离。我担心这可能导致列表中“有效”元素的顺序损坏。 因此是否可以在比较器中为空数据返回“ 0”值,还是有一种更干净的方法来解决

  • 问题内容: 首先采取klurudge解决方案,使用哨兵方法(必须让您的程序不允许输入哨兵值): 假设您忘记了阻止程序中的哨兵值,用户在B字段中输入了-2147483648,而A为空。上面的代码报告为true,应报告为false,不应报告为true或null。 比较可为空字段上的相等性的最简洁方法是什么?A == B仅应报告true或false,而不管该字段是否可为空。 问题答案: 也许IS [NO

  • 介绍 在JDK提供的比较器中,对于null的比较没有考虑,Hutool封装了相关比较,可选null是按照最大值还是最小值对待。 // 当isNullGreater为true时,null始终最大,此处返回的compare > 0 int compare = CompareUtil.compare(null, "a", true); // 当isNullGreater为false时,null始终最小

  • 问题内容: 以我想使其正常工作的方式,这可能是不可能的,但是可以了。 数据库中的条目是: 但是,查询不返回任何结果。当然,如果涉及到日期,这将起作用,但是没有涉及。如果开始= ‘00:00:00’,它也将起作用。 问题答案: 我认为您正在寻找的是: 我不确定您是否需要使用CAST,尽管这也可以工作。

  • 主要内容:1) 等于运算(=),2) 安全等于运算符(<=>),3) 不等于运算符(<> 或者 !=),4) 小于等于运算符(<=),5) 小于运算符(<),6) 大于等于运算符(>=),7) 大于运算符(>),8) IS NULL(ISNULL) 和 IS NOT NULL 运算符,9) BETWEEN AND 运算符,总结当使用 SELECT 语句进行查询时, MySQL 允许用户对表达式的左边操作数和右边操作数进行比较,比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NUL

  • 我对在Java中实现一个特殊的优先级队列变体很感兴趣,我希望这个优先级队列能够与泛型类型一起工作。在Java的集合对象中,存储具有某种排序的对象(例如PriorityQueue、TreeSet等),可以使用实现Compariable的类以及不一定实现Compariable的类,因为类的比较器传递给构造函数。 如何在优先级队列类中实现此功能?如果给我一个比较器,我是否必须根据类是否实现Compara