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

MySQLでTINYINT型カラムが「1以外」または「NULL」のレコードを取得する方法

MySQLでは、TINYINT型のカラムに対して「1以外の値」または「NULL」を含むレコードを抽出したいケースはよくあります。しかし、<> 1 の比較条件だけではNULLのレコードは取得できないため、IS NULL を組み合わせる必要があります。この記事では、具体的な手順をサンプルコードとともに解説します。

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

まず、TINYINT型のカラムを含むテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    -> EmployeeName varchar(20),
    -> isMarried tinyint
    -> );
Query OK, 0 rows affected (0.83 sec)

このテーブルには、従業員ID(EmployeeId)、従業員名(EmployeeName)、結婚しているかどうかを示すフラグ(isMarried)の3つのカラムがあります。isMarried はTINYINT型で、1が「既婚」、0が「未婚」、NULLが「未登録」を表します。

2. レコードの挿入

次に、INSERT文を使ってサンプルデータを挿入します。ここでは意図的にNULLの値も含めています。

mysql> insert into DemoTable(EmployeeName,isMarried) values('Chris',NULL);
Query OK, 1 row affected (0.76 sec)
mysql> insert into DemoTable(EmployeeName,isMarried) values('David',1);
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable(EmployeeName,isMarried) values('Mike',0);
Query OK, 1 row affected (0.69 sec)
mysql> insert into DemoTable(EmployeeName,isMarried) values('Sam',NULL);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(EmployeeName,isMarried) values('Bob',0);
Query OK, 1 row affected (0.10 sec)

3. 挿入した全レコードの確認

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

mysql> select *from DemoTable;

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

+------------+--------------+-----------+
| EmployeeId | EmployeeName | isMarried |
+------------+--------------+-----------+
|          1 | Chris        |      NULL |
|          2 | David        |         1 |
|          3 | Mike         |         0 |
|          4 | Sam          |      NULL |
|          5 | Bob          |         0 |
+------------+--------------+-----------+
5 rows in set (0.00 sec)

5件のレコードが登録されており、ChrisとSamのisMarriedにはNULLが格納されていることがわかります。

4. 「1以外またはNULL」のレコードを取得するクエリ

ここが本題です。isMarried が1以外、またはNULLであるレコードを取得するには、以下のようにOR条件でIS NULLを組み合わせます。

mysql> select *from DemoTable where isMarried <> 1 or isMarried IS NULL;

実行結果:

+------------+--------------+-----------+
| EmployeeId | EmployeeName | isMarried |
+------------+--------------+-----------+
|          1 | Chris        |      NULL |
|          3 | Mike         |         0 |
|          4 | Sam          |      NULL |
|          5 | Bob          |         0 |
+------------+--------------+-----------+
4 rows in set (0.00 sec)

既婚(1)のDavidを除く4件のレコードが正しく取得できました。

ポイント:なぜIS NULLが必要なのか

isMarried <> 1 だけの条件では、NULLのレコード(ChrisとSam)は結果に含まれません。これはSQLにおいて、NULLとの比較演算(=<> など)の結果が「UNKNOWN(不明)」と評価され、WHERE句では偽として扱われるためです。

そのため、NULL値も対象に含めたい場合は、必ず OR カラム名 IS NULL を明示的に追加する必要があります。これはブーリアン値をTINYINTで管理する際によくある落とし穴なので、覚えておくと便利です。

  1. MySQLでテーブル内の最大値を持つレコードを取得する方法

    MySQLでは、MAX()関数とサブクエリを組み合わせることで、特定のカラムにおける最大値と、その値を持つレコード全体を簡単に取得できます。この記事では、実際にテーブルを作成し、データを挿入して、最大値のレコードを抽出する手順を解説します。1. テーブルを作成するまず、プレイヤーのスコアを管理するためのサンプルテーブルを作成します。mysql> create table DemoTable1449     -> (     -> PlayerId int NOT NULL AUTO_INCREME

  2. MySQLで複数のカラムにNULL値を含むレコードを検索する方法

    はじめにMySQLで複数のカラムの中にNULL値が1つでも含まれているレコードを抽出したい場合、GREATEST()関数を活用するのが効果的です。GREATEST()は引数の中から最大値を返す関数ですが、引数のいずれかにNULLが含まれている場合、結果もNULLを返すという特性があります。この特性を利用すれば、複数カラムにわたるNULL値のチェックをシンプルな条件式で実現できます。この記事では、実際にテーブルを作成し、サンプルデータを挿入して、NULL値を含むレコードを検索する手順を順番に解説します。テーブルの作成まず、4つのINT型カラムを持つテーブルを作成しましょう。mysql> c