MySQL で Null 以外の値のみを選択する

Raymond Peter 2023年1月30日
  1. MySQL の Null 値を理解する
  2. MySQL で WHERE NOT<=> を使用して非ヌル値のみを選択する
MySQL で Null 以外の値のみを選択する

このチュートリアル記事では、特定の列からすべての null 値を削除する select ステートメントを MySQL で作成する方法を説明します。

MySQL の Null 値を理解する

NULL 値は、テーブルのどの部分が空であるかを知るのに役立ち、それらを適切に処理できるようにします。

テーブルから null 行または列を削除する理由は、探しているものによって大きく異なりますが、1つの良い例は、テーブル内の特定の列からのデータが必要であり、行が NULL として返される場合は使用できません。その情報を読んでください。

大きなテーブルを処理する場合、null 値を削除すると、時間を節約し、必要なコンピューティングを減らすことができます。

テーブルからクエリを実行するスクリプトを記述してから、データをループして null 値を求めるスクリプトを作成する代わりに、最初のスクリプトに IS NOT NULL 条件を含めることでプロセスを簡素化できます。

SELECT * FROM 'table name'
WHERE 'column name' IS NOT NULL;

結果は、指定された列に基づく NULL 値を持つ行のない完全なテーブルになります。

以下の例では、アルバニーの郵便番号のリストと、正しく入力された郵便番号とタイプミスのある郵便番号を区別するために、両側に true または false のカテゴリがあります。

| code   | cd_check |
| -------|----------|
| NULL   |   true   |
| 12649  |   false  | 
| 12248  |   true   |
| 12239  |   true   |
| 12359  |   NULL   |
| 12227  |   true   |

cd_check 列に NULL 値がある行のみを削除するには、次のコードを適用します。

CREATE TABLE albany (
  code INTEGER,
  cd_check TEXT 
);

INSERT INTO albany VALUES (NULL,"true");
INSERT INTO albany VALUES (12649,"false");
INSERT INTO albany VALUES (12248,"true");
INSERT INTO albany VALUES (12239,"true");
INSERT INTO albany VALUES (12359,NULL);
INSERT INTO albany VALUES (12227,"true");

SELECT code, cd_check FROM albany
WHERE cd_check IS NOT NULL;

結果:

| code   | cd_check |
| -------|----------|
| NULL   |   true   |
| 12649  |   false  | 
| 12248  |   true   |
| 12239  |   true   |
| 12227  |   true   |

上記は、cd_check 列に NULL 値を含む行がないテーブルを返しました。ただし、指定された列は 1つだけなので、NULL 値の行はコード列の下に残ります。

AND ステートメントを追加することにより、複数の列から行を削除できます。ステートメントは両方の列をチェックインし、以下を返します。

| code   | cd_check |
| -------|----------|
| 12649  |   false  | 
| 12248  |   true   |
| 12239  |   true   |
| 12227  |   true   |

null 値を含む両方の行がテーブルから削除されました。

MySQL で WHERE NOT<=> を使用して非ヌル値のみを選択する

スクリプトに IS NOT NULL を配置する代わりに、次の代替手段を使用できます。

WHERE NOT および <=>、比較演算子は、WHERE の後に NOT が続く場合、IS NOT に置き換えます。

例:

SELECT code, cd_check FROM albany
WHERE NOT cd_check <=> NULL;

これも機能しますが、IS NOT NULL を使用することをお勧めします。これは、より良い方法です。