MySQLの<=>演算子とは?NULL安全な等価比較の使い方を解説
MySQLには、NULL値も安全に比較できる特殊な等価演算子 <=>(NULL安全等価演算子)が用意されています。この記事では、<=> 演算子の動作と、通常の = 演算子との違いを具体例とともに解説します。
ケース1:通常の値の比較(= 演算子と同じ動作)
<=> 演算子は、NULL以外の値同士を比較する場合、= 演算子とまったく同じように動作します。つまり、両辺の値が等しければ「1(TRUE)」、等しくなければ「0(FALSE)」を返します。
たとえば、次のような比較では、どちらの演算子でも結果は同じになります。
mysql> SELECT 10 <=> 10;
結果は 1 を返します。
ケース2:NULLとの比較(= 演算子との決定的な違い)
<=> 演算子の真価が発揮されるのは、NULLを含む比較です。
- 値と NULL を比較した場合 → 0 を返す
- NULL と NULL を比較した場合 → 1 を返す
一方、= 演算子の場合、比較対象にNULLが含まれると、結果は常に NULL になります。「NULL = NULL」でさえNULLが返されるため、「等しいかどうか」を判定できません。
実行例で確認する
まずは <=> 演算子を使った例です。
mysql> SELECT 10 <=> 10, NULL <=> NULL, 10 <=> NULL;
出力結果:
+-----------+---------------+-------------+ | 10 <=> 10 | NULL <=> NULL | 10 <=> NULL | +-----------+---------------+-------------+ | 1 | 1 | 0 | +-----------+---------------+-------------+ 1 row in set (0.00 sec)
注目すべきは「NULL <=> NULL」の部分です。= 演算子ならNULLが返されるところ、<=> 演算子では 1 が返されています。これにより、「両者がNULLであるかどうか」を正確に判定できます。
次に、同じ条件を = 演算子で実行してみます。
mysql> SELECT 10 = 10, NULL = NULL, 10 = NULL;
出力結果:
+---------+-------------+-----------+ | 10 = 10 | NULL = NULL | 10 = NULL | +---------+-------------+-----------+ | 1 | NULL | NULL | +---------+-------------+-----------+ 1 row in set (0.00 sec)
このように「NULL = NULL」はNULLを返します。SQLにおけるNULLは「不明な値」を意味するため、= 演算子では真偽を確定できないのです。
まとめ
<=>はNULLを含む比較でも必ず 0 か 1 を返すため、WHERE句や結合条件でNULLを扱う際に非常に便利です。=演算子でNULLを判定したい場合は、代わりにIS NULL/IS NOT NULLを使うのが一般的です。<=>は「NULL安全等価演算子」と呼ばれ、MySQL固有の機能である点にも注意しましょう。
-
C#の「is」演算子とは?目的と使い方を実例付きで解説
C#の「is」演算子とはC#における「is」演算子は、オブジェクトの実行時の型(ランタイム型)が、指定した型と互換性があるかどうかを判定するために使用されます。判定結果はbool値(true / false)として返されるため、条件分岐と組み合わせて使われることが多い演算子です。基本構文is演算子の基本的な構文は以下の通りです。expr is typeexpr:判定対象となる式type:比較対象となる型の名前式 expr の実行時の型が type と互換性がある場合は true を、互換性がない場合は false を返します。使用例以下は、C#でis演算子を使用してオブジェクトの型を判定する例
-
C#の演算子の優先順位とは?基本ルールとサンプルコードで解説
演算子とは演算子(オペレーター)とは、コンパイラに対して特定の数学的処理や論理処理を実行するよう指示するための記号です。C#には、算術演算子・関係演算子・論理演算子など、さまざまな種類の演算子が用意されています。演算子の優先順位とは演算子の優先順位とは、1つの式の中で各項がどのようにグループ化され、どの順番で評価されるかを決めるルールです。この優先順位は式の評価結果に直接影響します。すべての演算子が同じ優先順位を持つわけではなく、たとえば乗算演算子(*)は加算演算子(+)よりも高い優先順位を持ちます。そのため、a + b * c という式は (a + b) * c ではなく a + (b *