SQLにおけるNULL処理の完全ガイド:初心者から上級者まで理解できる包括的な解説
SQLにおける NULL と IS NULL
および =
演算子の比較
SQLにおける NULL
は、データベースカラムに値が存在しないことを示す特殊な値です。他の値とは異なり、NULL
は比較や算術演算で使用することはできません。
このチュートリアルでは、IS NULL
演算子と =
演算子を使用して、SQLで NULL
を処理する方法について説明します。
IS NULL
演算子
IS NULL
演算子は、カラムの値が NULL
であるかどうかをテストするために使用されます。構文は以下の通りです。
expr IS NULL
ここで、expr
はテスト対象のカラムまたは式です。
例:
次のクエリは、customers
テーブルの email
カラムが NULL
であるすべての顧客レコードを取得します。
SELECT * FROM customers
WHERE email IS NULL;
=
演算子
=
演算子は、2つの値を比較するために使用されます。しかし、NULL
値を他の値と直接比較することはできません。
=
演算子を使用して NULL
を比較する場合は、IS NULL
演算子を使用する必要があります。
SELECT * FROM customers
WHERE phone IS NOT NULL;
NULL
は、データベースカラムに値が存在しないことを示す特殊な値です。
- 多くのデータベースシステムでは、
ISNULL
関数を使用して、NULL
値を別の値に置き換えることができます。 COALESCE
関数を使用して、NULL
値を別の値にデフォルト設定することもできます。
SELECT * FROM customers
WHERE email IS NULL;
SELECT * FROM customers
WHERE phone IS NOT NULL;
例 3: ISNULL
関数を使用して NULL
値を別の値に置き換える
このクエリは、customers
テーブルの email
カラムが NULL
の場合、その値を "unknown" に置き換えます。
SELECT *, ISNULL(email, 'unknown') AS email_replaced
FROM customers;
例 4: COALESCE
関数を使用して NULL
値を別の値にデフォルト設定する
SELECT *, COALESCE(phone, '(無効)') AS phone_default
FROM customers;
CASE
式は、条件に応じてさまざまな値を返すことができる強力なツールです。NULLチェックにも使用できます。
SELECT
customer_id,
name,
email,
CASE
WHEN email IS NULL THEN '不明'
ELSE email
END AS email_status
FROM customers;
このクエリは、customers
テーブルの email
カラムが NULL
の場合、"不明" という文字列を email_status
カラムに返します。それ以外の場合は、実際のメールアドレスを返します。
IFNULL 関数 (MySQL)
IFNULL
関数は、MySQL専用の関数で、指定された値が NULL
である場合に別の値を返すことができます。
SELECT
customer_id,
name,
IFNULL(email, '不明') AS email_status
FROM customers;
このクエリは、上記の CASE
式と同じ結果を返します。
NVL 関数 (Oracle)
NVL
関数は、Oracle専用の関数で、IFNULL
関数と同じ機能を提供します。
SELECT
customer_id,
name,
NVL(email, '不明') AS email_status
FROM customers;
このクエリは、MySQLの IFNULL
関数と同様の結果を返します。
COALESCE 関数 (標準SQL)
COALESCE
関数は、標準SQLで定義されている関数で、引数リストの中で最初の NULL
ではない値を返します。
SELECT
customer_id,
name,
COALESCE(email, '不明') AS email_status
FROM customers;
NULL許容型データ型
一部のデータベースシステムでは、NULL値を格納できる専用のデータ型が用意されています。例えば、PostgreSQLには text
型、MySQLには VARCHAR(255)
型などがあります。
これらのデータ型を使用すると、NULL
チェックを明示的に行う必要がなくなり、コードをより簡潔に記述することができます。
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email TEXT
);
このテーブル定義では、email
カラムは NULL
を許容するようになっています。
sql null