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

MySQLでNULLに対して「=」「<」「<>」などの比較演算子が使えないのはなぜ?理由と正しい判定方法

MySQLでNULLに比較演算子を使えない理由

MySQLにおいて、NULLは「不明な値(未知の値)」を表す特殊な値です。そのため、「=」(等しい)、「<」(より小さい)、「<>」(等しくない)といった比較演算子をNULLに対して使用しても、TRUEやFALSEといった意味のある結果は返されず、比較結果は常にNULLとなります。

具体的な値である「10」と「不明な値(NULL)」を比較すること自体が論理的に定義されていないためです。「不明なもの」と「10」が等しいのかどうかは、判断しようがないからです。

実際に次の例でこの動作を確認してみましょう。

mysql> SELECT 10 = NULL, 10 < NULL, 10 <> NULL;
+-----------+-----------+------------+
| 10 = NULL | 10 < NULL | 10 <> NULL |
+-----------+-----------+------------+
|      NULL |      NULL |       NULL |
+-----------+-----------+------------+
1 row in set (0.07 sec)

上記の実行結果のように、どの比較演算でも戻り値はNULLとなり、まったく意味のある情報が得られません。

NULLを判定する正しい方法:IS NULL / IS NOT NULL

ある値がNULLかどうかを調べたい場合は、比較演算子ではなく、NULL専用の演算子であるIS NULLまたはIS NOT NULLを使用します。

mysql> SELECT 10 IS NULL, 10 IS NOT NULL;
+------------+----------------+
| 10 IS NULL | 10 IS NOT NULL |
+------------+----------------+
|          0 |              1 |
+------------+----------------+
1 row in set (0.00 sec)

このようにIS NULL演算子を使えば、0(偽)や1(真)といった明確な結果を得ることができます。WHERE句などでNULLを含むカラムを検索する際も、「column_name = NULL」ではなく「column_name IS NULL」を使うのが基本ルールなので、覚えておきましょう。

  1. MySQLのLIKEクエリで「%」を含む列値を検索する方法【エスケープ処理の基本】

    MySQLのLIKEクエリで「%」を含む値を検索するには?MySQLでは、「%」はLIKE句におけるワイルドカードとして機能するため、そのまま検索することはできません。「%」という文字そのものを含む列値を検索したい場合は、バックスラッシュ(\)によるエスケープ処理が必要です。基本構文「%」を含む列値を検索する場合の構文は以下の通りです。select * from yourTableNamewhere yourColumnName LIKE \%%;ポイントは、検索対象の「%」の直前に「\(バックスラッシュ)」を付けることです。これにより、ワイルドカードではなく通常の文字として扱われます。実際に

  2. MySQLで複数のLIKE演算子をORDER BYと組み合わせる方法

    MySQLでは、複数のLIKE演算子をORDER BY句の中で組み合わせることで、指定したキーワードにより多く一致するレコードを優先的に並べ替えることができます。このテクニックは、LIKE演算子が「一致すれば1」「一致しなければ0」を返すという性質を利用しています。各条件の結果を足し合わせることで一致数を計算し、降順(DESC)にソートすることで、関連度の高いレコードを上位に表示できるのです。以下は、複数のLIKE演算子をORDER BYと組み合わせて実装する際の基本構文です。select *from yourTableName order by ( yourColumnName li