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

MySQLでNULLの行を取得するのに比較演算子「=」が使えないのはなぜ?IS NULL演算子の使い方を解説

NULLに比較演算子「=」を使用できない理由

SQLにおいてNULLは「値が存在しないこと」を表す特殊なマーカーであり、0や空文字列のような具体的な値ではありません。NULLはいかなる値とも等しくないため、比較演算子「=」を使ってNULLを判定することはできません。

テーブルからNULLを含む行を取得したい場合は、IS NULL演算子を使用する必要があります。以下、従業員(employee)テーブルのデータを使って具体的に見ていきましょう。

正しい方法:IS NULL演算子を使う

mysql> Select * from Employee WHERE Salary IS NULL;

+----+-------+--------+
| ID | Name  | Salary |
+----+-------+--------+
| 7  | Aryan | NULL   |
| 8  | Vinay | NULL   |
+----+-------+--------+

2 rows in set (0.00 sec)

このクエリではIS NULL演算子を使用しているため、給与(Salary)列がNULLになっている行を正しく取得できています。

誤った方法:「=」で比較した場合

mysql> Select * from employee where salary = NULL;
Empty set (0.00 sec)

一方、このクエリは比較演算子「=」を使用しているため、結果は空のセット(Empty set)となります。NULLは値ではないためです。

技術的な背景:3値論理

より深く理解するために、SQLの「3値論理」という概念を紹介します。通常の比較式はTRUEかFALSEのどちらかに評価されますが、NULLが関わる比較(例:NULL = NULL)はTRUEでもFALSEでもなく、UNKNOWN(不明)と評価されます。

WHERE句は評価結果がTRUEとなる行のみを返す仕様のため、UNKNOWNと評価された行はたとえ実際にNULLを持っていても結果から除外されてしまいます。これが「=」ではNULLの行を取得できない根本的な理由です。

まとめ

  • NULLは値ではなく「不明」を意味する特殊なマーカーである
  • NULLの判定には必ずIS NULL(またはIS NOT NULL)を使用する
  • 「=」でNULLと比較すると結果はUNKNOWNとなり、行は返されない
  1. MySQLでNULLに対して「=」「<」「<>」などの比較演算子が使えないのはなぜ?理由と正しい判定方法

    MySQLでNULLに比較演算子を使えない理由MySQLにおいて、NULLは「不明な値(未知の値)」を表す特殊な値です。そのため、「=」(等しい)、「<」(より小さい)、「<>」(等しくない)といった比較演算子をNULLに対して使用しても、TRUEやFALSEといった意味のある結果は返されず、比較結果は常にNULLとなります。具体的な値である「10」と「不明な値(NULL)」を比較すること自体が論理的に定義されていないためです。「不明なもの」と「10」が等しいのかどうかは、判断しようがないからです。実際に次の例でこの動作を確認してみましょう。mysql> SELECT

  2. JavaでMySQLデータベースのテーブルから最後のレコードを取得する方法

    MySQLデータベースからデータを取得するには、JavaのexecuteQuery()メソッドを使用します。本記事では、テーブルに登録された最後のレコード(最新の1件)をJavaプログラムで取得する手順を、サンプルコード付きでわかりやすく解説します。1. MySQLデータベースにテーブルを作成するまず、MySQLデータベース上にテーブルを用意します。ここでは「sample」データベースに、以下のようなテーブルを作成します。mysql> create table javaGetDataDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRI