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

NULL値を含むフィールドに対してMySQLのSELECTを実行する方法

MySQLのSELECTでNULL値を含むレコードを取得するには、IS NULL演算子を使用します。NULLは「値が存在しない」ことを表す特殊な値であり、通常の比較演算子(= や <>)では正しく判定できないため注意が必要です。

まず、サンプル用のテーブルを作成しましょう。

mysql> create table DemoTable1455
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.47 sec)

テーブルへのデータ挿入

insertコマンドを使用して、テーブルにいくつかのレコードを挿入します。ここでは、通常の値('John')、NULL、空文字列('')の3種類のデータを用意します。

mysql> insert into DemoTable1455 values('John');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable1455 values(NULL);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1455 values('');
Query OK, 1 row affected (0.19 sec)

テーブルの全レコードを確認する

select文を使って、テーブル内のすべてのレコードを表示してみましょう。

mysql> select * from DemoTable1455;

実行すると、次のような結果が出力されます。

+------+
| Name |
+------+
| John |
| NULL |
| |
+------+
3 rows in set (0.00 sec)

NULL値を含むフィールドをSELECTするクエリ

NULL値を含むフィールドに対してMySQLのSELECTを実行するには、以下のようにクエリを記述します。

mysql> select * from DemoTable1455 where Name <> 'John' or Name is null;

実行結果は以下の通りです。

+------+
| Name |
+------+
| NULL |
| |
+------+
2 rows in set (0.00 sec)

ポイント解説

このクエリの重要なポイントは「or Name is null」の部分です。NULLは比較演算子では判定できず、Name <> 'John'のような条件だけでは、NULLの行は結果に含まれません。これは、NULLとの比較結果が「UNKNOWN(不明)」と評価されるためです。

そのため、NULL値を含む行を取得したい場合は、必ずIS NULLまたはIS NOT NULLを使用する必要があります。上記のクエリでは、OR条件によって「Nameが'John'以外」または「NameがNULL」である行を取得しているため、NULLの行と空文字列の行の2件が正しく表示されています。

  1. MySQLでNULL値を1として表示・更新する方法

    MySQLでは、テーブル内のNULL値を別の値(たとえば「1」)に置き換えて扱いたい場面があります。この記事では、IFNULL関数とUPDATE文を組み合わせて、NULL値を1に変換する具体的な手順をサンプルコード付きで解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable1963 ( Counter int ); Query OK, 0 rows affected (0.00 sec) 2. レコードを挿入する INSERT文を使って、NULLを含む複数のレコードを

  2. MySQLでWHERE IN句とNULLを組み合わせてレコードを取得する方法

    MySQLでは、WHERE IN句を使った検索時にNULL値を含む行も取得したいケースがあります。しかし、NULLは通常の比較演算子では正しく評価されないため、IS NULLを組み合わせる必要があります。本記事では、その具体的な方法をサンプルコードとともに解説します。基本の構文NULLを含めて検索する場合の基本的な構文は以下のとおりです。ポイントは、IN句の条件に加えて OR カラム名 IS NULL を追加することです。SELECT yourColumnName1, yourColumnName2, yourColumnName3, ... N FROM yourTabl