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

在MySQL中,此运算符<=>是什么?

农飞星
2023-03-14
问题内容

我正在处理由以前的开发人员编写的代码,并在查询中说:

WHERE p.name <=> NULL

<=>这个查询是什么意思?等于=吗?还是语法错误?

但是它没有显示任何错误或异常。我已经知道<>= !=在MySQL的。


问题答案:

TL; DR

这是NULL安全的相等运算符。

像常规=运算符一样,将两个值进行比较,结果为0(不相等)或1(相等);换句话说:'a' <=> 'b'yields 0'a' <=> 'a'yields 1

与常规=运算符不同,of的值NULL没有特殊含义,因此它永远不会产生NULL可能的结果。所以:'a' <=> NULL收益率0NULL <=> NULL收益率1

有用性

当两个操作数都可能包含NULL并且您需要两列之间的一致比较结果时,这可能会很有用。

另一个用例是准备好的语句,例如:

... WHERE col_a <=> ? ...

在这里,占位符可以是标量值,也可以NULL不必更改有关查询的任何内容。

相关运营商

此外<=>还有可以用来比较其他两家运营商NULL,分别是IS NULLIS NOT NULL;
它们是ANSI标准的一部分,因此与其他数据库不同(与<=>特定于MySQL)不同,它们也受支持。

您可以将它们视为MySQL的专长<=>

'a' IS NULL     ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)

基于此,您的特定查询(片段)可以转换为更可移植的:

WHERE p.name IS NULL

支持

SQL:2003标准为此引入了一个谓词,其谓词<=>的形式与MySQL的运算符完全相同,其形式如下:

IS [NOT] DISTINCT FROM

普遍支持以下内容,但相对复杂:

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 1
     ELSE 0
END = 1


 类似资料:
  • 问题内容: 下面的代码打印出“ 3”,而不是您期望的“ 4”。 我懂 后缀增量发生在加载“ a”的值之后。(见下文)。 我不太明白是为什么。后缀++的运算符优先级高于+,因此它不应该首先执行吗? 问题答案: Postfix 递增变量的值,并 返回递增之前的值 。因此,在您的示例中,返回值将为,当然将为,然后将其赋给。在分配时,已经将to 的值增加了(由于优先),因此将覆盖该增加的值。

  • 问题内容: 假设我有如下JavaScript代码 这两个“ this”对象是指什么? 问题答案: 全局执行上下文中的值引用全局对象,例如: 对于功能代码,实际上取决于您如何调用该功能,例如,在以下情况下隐式设置该值: 调用没有 基础对象 引用的函数: 该值还将引用全局对象。 调用绑定为对象属性的函数 : 该值将参考。 使用运算符: 该值将引用从继承的新创建的对象。 另外,可以在调用函数时使用或方法

  • 本文向大家介绍JavaScript中的运算符是什么?,包括了JavaScript中的运算符是什么?的使用技巧和注意事项,需要的朋友参考一下 让我们采用一个简单的表达式“ 4 + 5等于9”。这里4和5称为操作数,“ +”称为运算符。 JavaScript支持以下类型的运算符。 算术运算符 比较运算符 逻辑(或关系)运算符 赋值运算符 条件(或三元)运算符 例 这是一个说明运算符示例的示例-

  • 在下面的代码示例中,做什么:

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 我应该在TSQL中使用!=或<>表示不相等吗? 如果我使用一个简单的表,例如: 两者都给我: 那么和mysql运算符有什么区别? 问题答案: 它们完全相同。请参阅文档。 http://dev.mysql.com/doc/refman/5.0/en/comparison- operators.html#operator_not-

  • 问题内容: Swift 1.1包含〜>运算符的声明: 这在Swift中有什么用?它似乎已声明,但未定义任何可利用它的函数。其他开发人员已将其用于响应模式和封送队列之间的封包,但我想知道为什么在标准框架中对其进行了定义。我猜想它可以“保留”一个自定义运算符供开发人员使用,因为它具有最高的优先级。 问题答案: 由于Swift是开源的,我们可以看到将stdlib 包括在内的实际原因:作为Swift 1.