MySQLでNULLレコードを除外してデータを取得する方法(IS NOT NULLの使い方)
MySQLでNULL以外のレコードを選択するには?
MySQLでNULLが含まれていないレコードだけを取得したい場合は、IS NOT NULL演算子を使用します。等価比較(= や !=)ではNULLを判定できないため、必ず「IS NOT NULL」を使う点がポイントです。
ここでは、実際にテーブルを作成し、NULLデータを除外するSELECT文の動作を順番に確認していきましょう。
1. テーブルの作成
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable1792
(
Name varchar(20)
);
Query OK, 0 rows affected (0.00 sec)2. レコードの挿入
次に、INSERT文を使って値とNULLを含む複数のレコードを挿入します。
mysql> insert into DemoTable1792 values('John Smith');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1792 values(NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1792 values('David Miller');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1792 values(NULL);
Query OK, 1 row affected (0.00 sec)3. 全レコードの確認
SELECT文ですべてのレコードを表示してみます。
mysql> select * from DemoTable1792;
実行結果は以下の通りです。NULLのレコードが2件含まれていることがわかります。
+--------------+ | Name | +--------------+ | John Smith | | NULL | | David Miller | | NULL | +--------------+ 4 rows in set (0.00 sec)
4. IS NOT NULLでNULLレコードを除外する
NULLが含まれていないレコードのみを取得するには、WHERE句でIS NOT NULLを指定します。
mysql> select * from DemoTable1792 where Name IS NOT NULL;
実行結果は以下の通りです。
+--------------+ | Name | +--------------+ | John Smith | | David Miller | +--------------+ 2 rows in set (0.00 sec)
このように、NULLのレコードが除外され、値が存在する2件だけが取得できました。
補足:IS NOT NULLを使う理由
NULLは「値が不明・未設定」であることを表す特殊な状態のため、「Name = NULL」や「Name != NULL」といった比較では正しく判定できません。NULLかどうかを調べる際は、必ず「IS NULL」または「IS NOT NULL」を使用してください。
-
MySQLで月を指定してデータを抽出する方法(MONTH()関数の使い方)
MySQLで日付データから特定の「月」に該当するレコードだけを抽出したい場合は、MONTH()関数を使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、月を条件にしたSELECT文の書き方を具体的に解説します。1. サンプルテーブルの作成まずは、出荷日(Shippingdate)を格納するdatetime型のカラムを持つテーブルを作成します。mysql> create table DemoTable1599 -> ( -> Shippingdate d
-
MySQLのNOT NULL制約とは?空にできない列の定義方法とエラーの挙動を解説
MySQLでは、列にNULL(空の値)を許可したくない場合、テーブル定義時にNOT NULL制約を指定します。NOT NULLが設定された列にNULLを挿入しようとすると、MySQLはエラーを返し、データの登録を拒否します。NOT NULL制約を持つテーブルの作成まず、Id列とLastName列をNOT NULLとして指定したテーブルを作成してみましょう。mysql> create table DemoTable1895 ( Id int NOT NULL, FirstName varchar(20), LastName varchar(20) NOT N