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

MySQLでNULLとNOT NULLのレコードを表示する方法|特定の1つの値を除外する

NULL・NOT NULLレコードの表示と特定値の除外について

MySQLでNULLのレコードを表示するには「IS NULL」を使用します。また、特定の1つの値を除外したい場合は「!=」演算子を利用します。なお、「!=」は「<>」演算子の別名(エイリアス)であり、どちらを使っても同じ動作になります。

本記事では、NULLとNOT NULLのレコードを表示しながら、特定の値を持つレコードだけを除外するクエリの書き方を、実際のコード例をもとに解説します。

サンプルテーブルの作成

まず、以下のSQLを実行してテーブルを作成しましょう。

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    PlayerName varchar(40)
);
Query OK, 0 rows affected (0.50 sec)

テストデータの挿入

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

mysql> insert into DemoTable(PlayerName) values('Adam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(PlayerName) values(NULL);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(PlayerName) values('Sam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(PlayerName) values('Mike');
Query OK, 1 row affected (0.08 sec)

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

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

mysql> select *from DemoTable;

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

+----+------------+
| Id | PlayerName |
+----+------------+
|  1 | Adam       |
|  2 | NULL       |
|  3 | Sam        |
|  4 | Mike       |
+----+------------+
4 rows in set (0.00 sec)

特定の値を除外してNULL・NOT NULLレコードを表示する

ここからが本題です。以下のクエリでは、「Sam」という値を持つレコードを除外しつつ、NULLおよびNOT NULLのレコードをすべて表示しています。

mysql> select *from DemoTable
    where PlayerName!='Sam'
    or PlayerName IS NULL;

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

+----+------------+
| Id | PlayerName |
+----+------------+
|  1 | Adam       |
|  2 | NULL       |
|  4 | Mike       |
+----+------------+
3 rows in set (0.00 sec)

なぜ「or PlayerName IS NULL」が必要なのか

SQLにおいて、NULLに対する比較演算(例:「NULL != 'Sam'」)はTRUEにもFALSEにもならず、UNKNOWNとして評価されます。そのため、「WHERE PlayerName != 'Sam'」という条件だけでは、NULLのレコードは結果から除外されてしまいます。

そこで、「or PlayerName IS NULL」を条件に加えることで、NULLのレコードも確実に結果セットへ含めることができます。NULLを扱う際にはよくある落とし穴なので、覚えておくと便利です。

まとめ

  • NULLのレコードを表示するには「IS NULL」を使用する
  • 特定の値を除外するには「!=」または「<>」演算子を使用する
  • NULLは通常の比較演算子では判定できないため、「or カラム名 IS NULL」を組み合わせるのがポイント
  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でNOT NULLの値に対して1を設定する方法(IF関数とIS NOT NULLの使い方)

    MySQLでNOT NULLの値に1を設定するにはMySQLでは、IS NOT NULL演算子とIF()関数を組み合わせることで、値がNULLでない場合に「1」、NULLの場合に「0」を返すことができます。データの存在チェックやフラグ管理など、さまざまな場面で活用できる便利なテクニックです。基本構文NOT NULLかどうかを判定して1を設定する基本構文は以下のとおりです。select if( is not NULL,1,0) as anyAliasName;実際に動作するクエリを見てみましょう。mysql> select if( is not NULL,1,0);このクエリを実行すると、