MySQLのSELECT文でNULLを扱う方法|IS NULLの使い方を実例で解説
MySQLにおけるNULLの扱い方とSELECTステートメント
MySQLでは、NULLの長さは0として扱われます。本記事では、SELECTステートメントを使ってNULLを操作・判定する方法を、実際のコマンド例とともにわかりやすく解説します。
まず前提として、NULLは「値が存在しない」ことを表す特別な状態であり、空文字列('')とは明確に異なる点に注意してください。
1. CREATEコマンドでテーブルを作成する
最初に、CREATE TABLEコマンドを使ってサンプル用のテーブルを作成します。
mysql> CREATE table NullWIthSelect -> ( -> Name varchar(100) -> ); Query OK, 0 rows affected (0.62 sec)
上記のように、テーブルを正常に作成できました。
2. INSERTコマンドでレコードを挿入する
続いて、INSERTコマンドを使って複数のレコードを挿入していきます。
mysql> INSERT into NullWIthSelect values('John');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT into NullWIthSelect values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT into NullWIthSelect values();
Query OK, 1 row affected (0.18 sec)
mysql> INSERT into NullWIthSelect values('Carol');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT into NullWIthSelect values('');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT into NullWIthSelect values('David');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT into NullWIthSelect values();
Query OK, 1 row affected (0.08 sec)
上記では合計7件のレコードを挿入しました。内訳は以下の通りです。
- 実際の値を持つレコード:4件(John、Bob、Carol、David)
- 空文字列('')のレコード:1件
- NULLのレコード:2件(VALUESの値を省略して挿入)
3. SELECTですべてのレコードを表示する
挿入した全レコードを確認するには、SELECTコマンドを使用します。
mysql> SELECT * from NullWIthSelect;
実行結果は以下の通りです。
+-------+ | Name | +-------+ | John | | Bob | | NULL | | Carol | | | | David | | NULL | +-------+ 7 rows in set (0.00 sec)
NULLの行と、空文字列の行が混在しているのが確認できます。
4. IS NULLでNULLのレコードを抽出する
NULLを判定する場合、「= NULL」ではなく「IS NULL」を使用するのが基本です。まず構文を確認しましょう。
SELECT * from yourTableName where column_name is NULL;
この構文を適用して、Nameカラムの値がNULLであるレコードを取得してみます。
mysql> SELECT * from NullWIthSelect where Name is NULL;
実行結果:
+------+ | Name | +------+ | NULL | | NULL | +------+ 2 rows in set (0.00 sec)
このように、NULLのレコード2件のみが正確に抽出されました。
5. COUNT関数でNULLの長さが0であることを確認する
最後に、COUNT関数を使って、NULLが「長さ0」として扱われることを確認します。
mysql> SELECT count(Name) from NullWIthSelect where Name is NULL;
実行結果:
+-------------+ | count(Name) | +-------------+ | 0 | +-------------+ 1 row in set (0.04 sec)
COUNT(カラム名)はNULL以外の値のみをカウントする関数のため、WHERE句でNULLの行だけに絞り込んでも結果は0になります。この挙動からも、NULLが「値を持たない=長さ0」の状態であることが分かります。なお、NULLを含む行数そのものを数えたい場合は、COUNT(*)を使用してください。
-
JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法
executeQuery()メソッドの基本的な使い方JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);yourResultSetObject = yourPreparedStatementObject.executeQuery();それでは、実際にサンプルデータベース「sample」を使って手
-
PythonからMySQLのIF()関数を使う方法|SELECT文で条件分岐してデータを判定する
MySQLのIF()関数は、条件に応じて異なる値を返すための条件分岐用の関数です。指定した条件が真(TRUE)の場合と偽(FALSE)の場合で、それぞれ別の値を返すことができます。この記事では、PythonからMySQLデータベースに接続し、SELECT文の中でIF()関数を活用してデータを条件付きで取得する方法を解説します。IF()関数の構文IF(条件, 真の場合の値, 偽の場合の値)IF()関数はSELECT句と組み合わせて使用でき、特定の基準に基づいて取得結果を切り替えることができます。PythonでMySQLのテーブルからIF()関数を使ってデータを取得する手順mysql.connec