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