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

MySQLでIS NULLまたは!=1の条件に基づいてレコードを表示するクエリの書き方

MySQLでNULLまたは1以外のレコードを抽出する方法

MySQLでは、特定のカラムがNULLであるレコード、または特定の値と等しくないレコードを抽出したいケースはよくあります。ここでは、「Score」カラムがNULL、もしくは1以外であるレコードを取得する方法を解説します。

なお、NULL値との比較には「=」や「!=」が使えない点に注意が必要です。NULLは「不明な値」を意味するため、通常の比較演算子では評価されず、必ずIS NULL演算子を使う必要があります。

1. サンプルテーブルの作成

まず、テーブルを作成します。

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name varchar(100),
    Score int
);
Query OK, 0 rows affected (1.10 sec)

2. レコードの挿入

次に、insertコマンドを使ってサンプルデータを挿入します。ここでは、ScoreにNULLを持つレコードと値を持つレコードを混在させています。

mysql> insert into DemoTable(Name,Score) values('John',45);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Name,Score) values('Chris',null);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Name,Score) values('David',null);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(Name,Score) values('Bob',1);
Query OK, 1 row affected (0.11 sec)

3. テーブルの内容を確認

select文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行すると、以下のような結果が得られます。

+----+-------+-------+
| Id | Name  | Score |
+----+-------+-------+
|  1 | John  | 45    |
|  2 | Chris | NULL  |
|  3 | David | NULL  |
|  4 | Bob   | 1     |
+----+-------+-------+
4 rows in set (0.00 sec)

4. 「IS NULL OR !=1」条件でレコードを抽出する

本題となるクエリです。IS NULL!=をOR条件で組み合わせることで、ScoreがNULL、または1以外のレコードだけを表示できます。

mysql> select *from DemoTable where Score IS NULL OR Score!=1;

実行結果は以下の通りです。「Bob(Score=1)」だけが除外され、それ以外の3件が取得できています。

+----+-------+-------+
| Id | Name  | Score |
+----+-------+-------+
|  1 | John  | 45    |
|  2 | Chris | NULL  |
|  3 | David | NULL  |
+----+-------+-------+
3 rows in set (0.00 sec)

ポイントまとめ

  • NULLは「=」「!=」では判定できないため、必ずIS NULL(またはIS NOT NULL)を使用する。
  • NULLと1以外を同時に抽出したい場合は、WHERE Score IS NULL OR Score != 1のようにORで組み合わせる。
  • この条件により、Scoreが1のレコードのみ除外され、NULLを含むその他すべてのレコードが取得される。
  1. 【MySQL】数値の差順にレコードを並べ替えて表示するクエリの書き方

    MySQLでは、ORDER BY句に2つの列の差を指定することで、その数値の差に基づいてレコードを並べ替えて表示できます。点数の差や値の乖離が小さい順(または大きい順)にデータを確認したい場合に便利なテクニックです。基本構文数値の差順にレコードを表示するには、以下のような構文を使用します。select *from テーブル名order by (整数カラム名1 - 整数カラム名2);サンプルテーブルの作成まず、動作を確認するためのテーブルを作成しましょう。mysql> create table DemoTable1313-> (-> Name varchar(20),->

  2. 【MySQL入門】NULL値に応じて新しい列にカスタムテキストを表示する方法

    MySQLでは、IF()関数を活用することで、カラムの値がNULLかどうかを判定し、その結果に応じて新しい列に任意のカスタムテキストを表示できます。本記事では、実際のサンプルコードとともにその手順をわかりやすく解説します。1. サンプルテーブルを作成するまず、学生名を格納するシンプルなテーブルを作成しましょう。mysql> create table DemoTable1953 ( StudentName varchar(20) ); Query OK, 0 rows affected (0.00 sec)2. テストデータを挿入する次に、INSERT文を使ってレコ