【MySQL】<>演算子とIS NOT NULLの違いを徹底解説
MySQLでは、<>演算子を使ってNULL値と比較すると、必ずNULLが返され、結果として何も取得できません。これはMySQLの重要な仕様であり、多くの開発者がつまずくポイントです。
NULLとの比較結果がNULLになる理由
NULLは「値が不明・存在しない」という特殊な状態を表します。そのため、NULLと何かを比較した結果自体が「不明(NULL)」となり、WHERE句の条件としてはTRUEと評価されません。
以下の例で実際に確認してみましょう。
mysql> select 10 <> NULL; +------------+ | 10 <> NULL | +------------+ | NULL | +------------+ 1 row in set (0.00 sec) mysql> select NULL <> NULL; +--------------+ | NULL <> NULL | +--------------+ | NULL | +--------------+ 1 row in set (0.00 sec) mysql> select 'Chris' <> NULL; +-----------------+ | 'Chris' <> NULL | +-----------------+ | NULL | +-----------------+ 1 row in set (0.00 sec) mysql> select '' <> NULL; +------------+ | '' <> NULL | +------------+ | NULL | +------------+ 1 row in set (0.00 sec)
このように、数値でも文字列でも、空文字列('')であっても、NULLとの比較結果はすべてNULLになります。特に「空文字列とNULLは別物である」という点には注意が必要です。
検証用テーブルの作成
実際にテーブルを作成して動作を確認します。
mysql> create table DemoTable846(Value int); Query OK, 0 rows affected (0.93 sec)
INSERTコマンドでレコードを挿入します。
mysql> insert into DemoTable846 values(NULL); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable846 values(10); Query OK, 1 row affected (0.11 sec)
SELECT文で全レコードを表示します。
mysql> select *from DemoTable846;
出力結果は以下の通りです。
+-------+ | Value | +-------+ | NULL | | 10 | +-------+ 2 rows in set (0.00 sec)
IS NOT NULLを使った場合
IS NOT NULL演算子を使うと、NULL以外のレコードを正しく取得できます。
mysql> select *from DemoTable846 where Value IS NOT NULL;
出力結果:
+-------+ | Value | +-------+ | 10 | +-------+ 1 row in set (0.00 sec)
<>演算子を使った場合
一方、<>演算子でNULLと比較すると、結果は空になります。
mysql> select *from DemoTable846 where Value <> NULL; Empty set (0.00 sec)
まとめ
- NULLとの比較に
<>などの通常の比較演算子を使うと、結果は必ずNULL(不明)となり、WHERE句では何も取得できません。 - NULLかどうかを判定する場合は、必ず
IS NULL/IS NOT NULLを使用しましょう。 - 空文字列('')とNULLは異なる値です。混同しないよう注意が必要です。
-
MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?
MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970 (
-
MySQLとPostgreSQLの違いを徹底解説!特徴と比較ポイント
データベースの選定において、多くの開発者が候補に挙げるのがMySQLとPostgreSQLです。どちらも世界中で広く利用されているオープンソースのデータベースですが、設計思想や搭載されている機能には重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。MySQLとはリレーショナルデータベース管理システム(RDBMS)です。Oracle Corporation(オラクル社)によって開発・提供されています。Windows、macOS、Linux、BSD、UNIX、z/OSなど、幅広いプラットフォームに対応しています。システムの拡張性には制約があり、基本的には標準的な構成