IS NULL演算子とIS NOT NULL演算子の使い分け
MySQLでカラムが空またはNULLかどうかを確認する方法
- 空の列 は、値が割り当てられていないことを意味します。
- NULL値 は、値が存在しないことを意味します。
カラムが空またはNULLかどうかを確認するには、以下の方法があります。
IS NULL演算子を使用する
SELECT * FROM テーブル名 WHERE カラム名 IS NULL;
このクエリは、カラム名
がNULL値であるすべての行を返します。
SELECT * FROM テーブル名 WHERE カラム名 IS NOT NULL;
COALESCE関数を使用する
SELECT COALESCE(カラム名, 'デフォルト値') FROM テーブル名;
CASE式を使用する
SELECT CASE WHEN カラム名 IS NULL THEN '空' ELSE カラム名 END FROM テーブル名;
SELECT IFNULL(カラム名, 'デフォルト値') FROM テーブル名;
例
以下の例では、users
テーブルのname
カラムが空またはNULLかどうかを確認します。
-- IS NULL演算子を使用する
SELECT * FROM users WHERE name IS NULL;
-- IS NOT NULL演算子を使用する
SELECT * FROM users WHERE name IS NOT NULL;
-- COALESCE関数を使用する
SELECT COALESCE(name, '匿名') FROM users;
-- CASE式を使用する
SELECT CASE WHEN name IS NULL THEN '空' ELSE name END FROM users;
-- IFNULL関数を使用する
SELECT IFNULL(name, '匿名') FROM users;
- すべてのNULL値を取得したい場合は、
IS NULL
演算子を使用します。 - NULL値の場合にデフォルト値を表示したい場合は、
COALESCE
関数またはIFNULL
関数を使用します。 - NULL値と空の列を区別したい場合は、
CASE
式を使用します。
-- テーブル作成
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NULL,
PRIMARY KEY (id)
);
-- データ挿入
INSERT INTO users (name) VALUES ('John Doe');
INSERT INTO users (name) VALUES (NULL);
-- IS NULL演算子を使用する
SELECT * FROM users WHERE name IS NULL;
-- 結果
-- id | name
-- -- | --
-- 2 | NULL
-- IS NOT NULL演算子を使用する
SELECT * FROM users WHERE name IS NOT NULL;
-- 結果
-- id | name
-- -- | --
-- 1 | John Doe
-- COALESCE関数を使用する
SELECT COALESCE(name, '匿名') FROM users;
-- 結果
-- name
-- --
-- John Doe
-- 匿名
-- CASE式を使用する
SELECT CASE WHEN name IS NULL THEN '空' ELSE name END FROM users;
-- 結果
-- name
-- --
-- John Doe
-- 空
-- IFNULL関数を使用する
SELECT IFNULL(name, '匿名') FROM users;
-- 結果
-- name
-- --
-- John Doe
-- 匿名
このサンプルコードを実行すると、以下の結果が出力されます。
-- IS NULL演算子を使用する
id | name
-- | --
2 | NULL
-- IS NOT NULL演算子を使用する
id | name
-- | --
1 | John Doe
-- COALESCE関数を使用する
name
--
John Doe
匿名
-- CASE式を使用する
name
--
John Doe
空
-- IFNULL関数を使用する
name
--
John Doe
匿名
このサンプルコードを参考に、ご自身の状況に合わせてコードを修正してください。
=演算子を使用する
SELECT * FROM テーブル名 WHERE カラム名 = '';
LENGTH()関数を使用する
SELECT * FROM テーブル名 WHERE LENGTH(カラム名) = 0;
TRIM()関数を使用する
SELECT * FROM テーブル名 WHERE TRIM(カラム名) = '';
SELECT COUNT(*) FROM テーブル名 WHERE カラム名 IS NULL;
これらの方法は、上記の4つの方法よりも効率が劣ることがあります。
注意:
=
演算子を使用する方法は、空の文字列("")とNULL値を区別できません。LENGTH()
関数とTRIM()
関数を使用する方法は、空白文字のみを含む列には有効ではありません。COUNT()
関数を使用する方法は、NULL値のみをカウントします。
mysql sql