MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【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は異なる値です。混同しないよう注意が必要です。
  1. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (    

  2. MySQLとPostgreSQLの違いを徹底解説!特徴と比較ポイント

    データベースの選定において、多くの開発者が候補に挙げるのがMySQLとPostgreSQLです。どちらも世界中で広く利用されているオープンソースのデータベースですが、設計思想や搭載されている機能には重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。MySQLとはリレーショナルデータベース管理システム(RDBMS)です。Oracle Corporation(オラクル社)によって開発・提供されています。Windows、macOS、Linux、BSD、UNIX、z/OSなど、幅広いプラットフォームに対応しています。システムの拡張性には制約があり、基本的には標準的な構成