COALESCE
関数は、データベースのSQLで使われる関数の1つで、引数のリストから最初のNULLでない値を返す関数です。つまり、複数の値の中から最初の非NULLの値を取得する際に使用します。
COALESCE(引数1, 引数2, ... 引数N)
日本語で発音すると「コアレス」と近い読み方になります。
このページでは、COALESCE関数の意味と使い方(コツ)を初心者向けにわかりやすく1分でご説明します。
プログラマーやシステムエンジニアを目指す方であれば知らないと恥ずかしい基本知識です。是非最後までご覧ください。
COALESCE関数
COALESCE
はSQLの関数で、複数の引数を取り、その引数の中から最初のNULLでない値を返す関数です。
COALESCE(引数1, 引数2, ... 引数N)
- 返されるのは最初のNULLでない値: 引数のリストを左から右へと順番に評価し、最初に出現するNULLでない値がその結果として返されます。
- 全ての引数がNULLの場合、結果もNULL:
COALESCE
関数に与えられた全ての引数がNULLの場合、関数の結果もNULLとなります。
サンプルコード employees
テーブルの例
employees
テーブルが以下のデータを持っていると仮定します。
id | first_name | phone_home | phone_work |
---|---|---|---|
1 | John | NULL | 03-1234-5678 |
2 | Jane | 050-1234-5678 | NULL |
employees
テーブルこのテーブルから社員の電話番号を取得したい場合を考えてみます。自宅の電話番号がない場合は、仕事の電話番号を取得したいとします。
この場合のSQLクエリは次のようになります。
SELECT first_name, COALESCE(phone_home, phone_work) AS phone_number FROM employees;
このクエリの結果、Johnの自宅の電話番号がNULLなので、仕事の電話番号がphone_number
として取得されます。一方、Janeの場合は自宅の電話番号が存在するので、その値がphone_number
として取得されます。
このように、COALESCE
関数は特定の条件下でのデータのフォールバック値を設定する際に非常に役立ちます。
COALESCE関数の使いどころ/よくある利用方法
CASE1 デフォルト値の設定
あるカラムがNULLの場合にデフォルト値を設定したい場合に利用します。(例: 商品の価格が設定されていない場合に0を表示する。)
SELECT product_name, COALESCE(price, 0) AS price FROM products;
CASE2 複数のカラムからのフォールバック
1つのカラムがNULLの場合、別のカラムの値を使用する、というようなシナリオで利用します。(例: 自宅の電話番号がない場合、携帯の電話番号を表示する。)
SELECT name, COALESCE(home_phone, mobile_phone) AS contact_number FROM contacts;
CASE3 日付の範囲での最小・最大値取得
複数の日付のカラムがあり、最も古い日付や最も新しい日付を取得したい場合に、NULL値を考慮しつつ利用することができます。(例: 製品の製造日と入荷日のうち、最も新しい日付を取得する。)
SELECT product_name, COALESCE(manufactured_date, arrival_date) AS recent_date FROM products;
CASE4 外部結合の結果の扱い
OUTER JOINを使用すると、一致する行が存在しない場合にNULLが返されることがあります。このNULLの結果を適切な値に置き換える際にCOALESCE
が役立ちます。(例: 注文情報と支払情報を結合し、支払いがまだされていない場合に0を表示する。)
SELECT orders.order_id, COALESCE(payments.amount, 0) AS payment_amount FROM orders LEFT JOIN payments ON orders.order_id = payments.order_id;
以上のようなシチュエーションで、COALESCE
関数はデータのNULL値を適切に扱い、より意味のある値やデフォルト値に置き換えるために役立ちます。
SQL:COALESCE関数のまとめ
SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。
SQLは決して難しい技術ではないので、エンジニアであれば「当たり前のように」扱えて当然かも・・・?
とはいえ、案外SQLをちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。