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となり、行は返されない
-
MySQLでNULLに対して「=」「<」「<>」などの比較演算子が使えないのはなぜ?理由と正しい判定方法
MySQLでNULLに比較演算子を使えない理由MySQLにおいて、NULLは「不明な値(未知の値)」を表す特殊な値です。そのため、「=」(等しい)、「<」(より小さい)、「<>」(等しくない)といった比較演算子をNULLに対して使用しても、TRUEやFALSEといった意味のある結果は返されず、比較結果は常にNULLとなります。具体的な値である「10」と「不明な値(NULL)」を比較すること自体が論理的に定義されていないためです。「不明なもの」と「10」が等しいのかどうかは、判断しようがないからです。実際に次の例でこの動作を確認してみましょう。mysql> SELECT
-
JavaでMySQLデータベースのテーブルから最後のレコードを取得する方法
MySQLデータベースからデータを取得するには、JavaのexecuteQuery()メソッドを使用します。本記事では、テーブルに登録された最後のレコード(最新の1件)をJavaプログラムで取得する手順を、サンプルコード付きでわかりやすく解説します。1. MySQLデータベースにテーブルを作成するまず、MySQLデータベース上にテーブルを用意します。ここでは「sample」データベースに、以下のようなテーブルを作成します。mysql> create table javaGetDataDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRI