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

MySQLで空白値とNULL値をスキップする方法を実例で解説

MySQLで空白値とNULL値をスキップするには?

MySQLでデータを取得する際、NULLだけでなく空文字('')のレコードもまとめて除外したいケースはよくあります。その場合は、IS NOT NULL<> '' をAND条件で組み合わせたWHERE句を使用します。

基本構文

select *from yourTableName where yourColumnName IS NOT NULL AND yourColumnName <> '';

MySQLではNULLと空文字は別のものとして扱われるため、両方を除外するにはこのように2つの条件が必要です。「IS NOT NULL」だけでは空文字のレコードは残ってしまう点に注意しましょう。

サンプルテーブルの作成

まずは動作確認用のテーブルを作成します。ここでは「Id」と「FirstName」の2カラムを持つテーブルを用意しました。

mysql> create table DemoTable (Id int, FirstName varchar(20));
Query OK, 0 rows affected (0.66 sec)

テストデータの挿入

次にINSERT文でレコードを挿入します。通常の名前データに加えて、空文字('')、NULL、半角スペースなども意図的に含めているのがポイントです。

mysql> insert into DemoTable values(100,'Larry');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(101,'');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(102,'Chris');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(103,null);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(104,' ');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(105,'Robert');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(106,null);
Query OK, 1 row affected (0.13 sec)

挿入したデータの確認

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

mysql> select *from DemoTable;

実行すると、空文字やNULLが混在した次のような結果が得られます。

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 100  | Larry     |
| 101  |           |
| 102  | Chris     |
| 103  | NULL      |
| 104  |           |
| 105  | Robert    |
| 106  | NULL      |
+------+-----------+
7 rows in set (0.00 sec)

NULLと空白値を除外するクエリの実行

それでは本題です。WHERE句に「FirstName IS NOT NULL AND FirstName <> ''」を指定してクエリを実行します。

mysql> select *from DemoTable where FirstName IS NOT NULL AND FirstName <> '';

実行結果は以下の通りです。NULLや空文字のレコードが除外され、名前が登録されている3件だけが取得できました。

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 100  | Larry     |
| 102  | Chris     |
| 105  | Robert    |
+------+-----------+
3 rows in set (0.03 sec)

補足:半角スペースのみの値も確実に除外したい場合

空白スペースだけが入力された値まで確実に除外したい場合は、TRIM関数を組み合わせる方法が便利です。TRIMで前後の空白を取り除いてから空文字と比較することで、より厳密な判定が可能になります。

select *from DemoTable where FirstName IS NOT NULL AND TRIM(FirstName) <> '';

このように、IS NOT NULLと<> ''の組み合わせを覚えておけば、NULLと空文字が混在するデータから有効なレコードだけを簡単に抽出できます。

  1. MySQLでNULL値を1として表示・更新する方法

    MySQLでは、テーブル内のNULL値を別の値(たとえば「1」)に置き換えて扱いたい場面があります。この記事では、IFNULL関数とUPDATE文を組み合わせて、NULL値を1に変換する具体的な手順をサンプルコード付きで解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable1963 ( Counter int ); Query OK, 0 rows affected (0.00 sec) 2. レコードを挿入する INSERT文を使って、NULLを含む複数のレコードを

  2. MySQLでテーブルを結合(JOIN)してデータベースから値を取得する方法

    MySQLで複数のテーブルに分けて保存されているデータをまとめて取得したい場合は、JOIN(結合)を使用します。JOINとは、テーブル同士で共通となるキー(カラム)を基準に、複数のテーブルのレコードを関連付けて1つの結果セットとして取得できる仕組みです。本記事では、実際に2つのテーブルを作成し、JOINを使って値をフェッチする手順を具体的なSQL文とともに解説します。 1つ目のテーブル「demo52」を作成する まず、ユーザーのIDと名前を管理するテーブル「demo52」を作成します。「id」にはPRIMARY KEY(主キー)を設定します。 mysql> CREATE TABLE `