MySQLのNULLセーフ等価演算子とは?比較演算子との違いをわかりやすく解説
MySQLのNULLセーフ等価演算子(<=>)とは
MySQLのNULLセーフ等価演算子は、記号「<=>」で表される演算子で、標準SQLの「IS NOT DISTINCT FROM」に相当する機能を持っています。通常の比較演算子「=」と同じように等価性の比較を行いますが、オペランド(被演算子)にNULLが含まれる場合の挙動が大きく異なる点が特徴です。
具体的には、以下のような違いがあります。
- 通常の「=」演算子:オペランドのいずれか一方でもNULLの場合、結果はNULLを返す
- NULLセーフ演算子「<=>」:両方のオペランドがNULLなら1(真)を返し、片方だけがNULLなら0(偽)を返す
実行例で確認する違い
実際にSQLを実行して、「<=>」と「=」の挙動の違いを見てみましょう。
mysql> Select 50 <=> 50, NULL <=> NULL, 100 <=> NULL; +-----------+---------------+--------------+ | 50 <=> 50 | NULL <=> NULL | 100 <=> NULL | +-----------+---------------+--------------+ | 1 | 1 | 0 | +-----------+---------------+--------------+ 1 row in set (0.00 sec) mysql> Select 50 = 50, NULL = NULL, 100 = NULL; +---------+-------------+------------+ | 50 = 50 | NULL = NULL | 100 = NULL | +---------+-------------+------------+ | 1 | NULL | NULL | +---------+-------------+------------+ 1 row in set (0.00 sec)
結果の読み方
- 「50 <=> 50」:どちらもNULLではなく同じ値のため、1(真)を返します。「=」も同様に1を返します。
- 「NULL <=> NULL」:両方がNULLであるため、1(真)を返します。ここが最大のポイントで、「=」を使った場合はNULLが返されます。
- 「100 <=> NULL」:片方だけがNULLのため、0(偽)を返します。「=」の場合はNULLを返します。
使い分けのポイント
NULL値を含むカラム同士を比較し、「NULL同士は一致しているものとみなしたい」場合には「<=>」演算子が便利です。例えば、結合条件やWHERE句でNULLの扱いを厳密に制御したいときに役立ちます。一方、NULLが含まれる比較の結果を「不明(NULL)」として扱いたい場合は、従来通りの「=」演算子を使用しましょう。
-
TF(TransFlash)カードとは?microSDカードとの違いを徹底解説
近年のスマートフォンは大容量化が進み、大量のデータやさまざまなアプリケーションを本体に保存できるようになりました。それでも容量が足りない場合に備え、多くの端末には外部ストレージのオプションが用意されており、microSDカードを挿入してストレージを拡張できます。そんな中、「TFカードとは何か?」「SDカードとどんな関係があるのか?」と疑問に感じている方も少なくありません。TF(TransFlash)はあまり知られていないメモリーカードの名称で、存在を知らないユーザーも多いのが実情です。本記事では、TFカードの概要から、microSDカードとの違いまでをわかりやすく解説します。TFカードとは?T
-
localhostとは何か?127.0.0.1との違いをわかりやすく解説
すべてのネットワーク機器が切断されていても、実はコンピュータは一種のネットワーク上で通信を行うことができます。これが「ループバック(loopback)」と呼ばれる仕組みです。Unixマシンは仮想ネットワークデバイスを通じて、自分自身に対してネットワーク通信を送受信できます。つまり、物理的なネットワークが機能していなくても、ネットワーク形式の通信が可能になるのです。 127.0.0.1とは? 127.0.0.1は、最も広く使われているループバックIPアドレスです。このアドレスは、ループバック専用として予約された1,600万個以上のIPアドレス群の一部に含まれます。ループバックを利用することで、コ