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

MySQL:NULLおよびその他の値を含むテーブルから条件に基づいてレコードを取得する方法

MySQLでNULLとその他の値を含むテーブルから条件に基づいてレコードを取得する

MySQLにおいて、NULLは「値が存在しない・不明である」ことを表す特殊な値です。そのため、通常の比較演算子(= や !=)ではNULLと正しく比較できず、意図しない結果になることがあります。NULLを含むカラムに条件を適用する際は、IS NULL演算子を組み合わせることが重要です。

本記事では、NULL値と数値が混在するテーブルから、特定の条件に基づいてレコードを取得する具体的な手順を解説します。

1. テーブルを作成する

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

mysql> create table DemoTable
(
    value1 int,
    value2 int,
    value3 int
);
Query OK, 0 rows affected (0.70 sec)

2. レコードを挿入する

insertコマンドを使用して、テーブルに複数のレコードを挿入します。ここでは、意図的にNULL値を含むデータも登録しています。

mysql> insert into DemoTable values(20,40,null);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(40,40,null);
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable values(null,null,null);
Query OK, 1 row affected (0.17 sec)

3. テーブル内の全レコードを表示する

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

mysql> select *from DemoTable;

実行すると、次のような出力が得られます。

+--------+--------+--------+
| value1 | value2 | value3 |
+--------+--------+--------+
|     20 |     40 | NULL   |
|     40 |     40 | NULL   |
|   NULL |   NULL | NULL   |
+--------+--------+--------+
3 rows in set (0.00 sec)

4. 条件に基づいてNULLおよびその他の値のレコードを取得するクエリ

それでは、「各カラムがNULLであるか、または特定の値(この例では20)と等しくない」という条件でレコードを取得するクエリを実行してみましょう。

mysql> select *from DemoTable
where (value1 is null or value1!=20) and
(value2 is null or value2!=20) and
(value3 is null or value3!=20);

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

+--------+--------+--------+
| value1 | value2 | value3 |
+--------+--------+--------+
|     40 |     40 | NULL   |
|   NULL |   NULL | NULL   |
+--------+--------+--------+
2 rows in set (0.00 sec)

クエリのポイント

このクエリの鍵となるのは、(value1 is null or value1!=20)という条件式です。もしvalue1 != 20だけを指定した場合、NULL値を持つ行は比較結果がUNKNOWN(不明)として扱われ、WHERE句によって除外されてしまいます。

そこでIS NULLとのOR条件を組み合わせることで、「NULLである行」と「20以外の値を持つ行」の両方を結果に含めることができます。出力結果を見ると、value1が20である最初の行のみが除外され、40を持つ行とすべてNULLの行の2件が正しく取得できていることがわかります。

  1. MySQLでNULLを含む列からNULL以外(NOT NULL)の値だけを抽出して表示する方法

    MySQLのIS NOT NULLを使ってNULL以外の値のみを表示するMySQLで、NULLとNULL以外のレコードが混在する列からNULL以外の値だけを取得したい場合は、IS NOT NULL演算子を使用します。この記事では、実際にテーブルを作成しながら手順を解説します。1. テーブルの作成まず、日付型の列を持つサンプルテーブルを作成します。mysql> create table DemoTable1      (      DueDate date      ); Query OK, 0 ro

  2. MySQLで条件に応じて同じ列の2つの値を連結する方法

    MySQLで条件に応じて同じ列の2つの値を連結する方法 MySQLでは、max() などの集計関数と CASE 式を組み合わせることで、条件の異なる同じ列の値を1つの文字列として連結できます。この記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、create table コマンドでテーブルを作成しましょう。 mysql> create table DemoTable1869     (     Id int,   &nb