PostgreSQLのCOALESCE関数とは?実例付きで徹底解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年9月)

✔このような方へ向けて書かれた記事となります

「PostgreSQLのcoalesce関数って何?」
「coalesce関数で何ができるのか知りたい」
「coalesce関数の使い方が見てみたい」

✔当記事を通じてお伝えすること

  • PostgreSQL coalesce関数の基礎
  • coalesce関数の具体的な実装方法
  • coalesce関数の実例

当記事では、coalesce関数の基本的な考え方だけでなく、その使い方や応用例まで、具体的な実践から紐解いて説明しています。

ぜひ最後までお読みください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

PostgreSQLとは

PostgreSQLは、世界中で広く使用されているオープンソースのリレーショナルデータベース管理システムです。

拡張性や信頼性、そしてSQL標準への強い準拠が特徴です。

これにより、PostgreSQLはWebアプリケーションのバックエンドとして、また大規模なデータウェアハウスでの使用にも適しています。

NULL値とは

こちらでは、NULL値の概念について深く掘り下げていきます。

  • NULL値とは何か
  • NULL値が発生する原因

NULL値とは何か

NULL値は、データベースにおいて情報が不在または不明であることを示す特別なマーカーです。

NULLは空の文字列や0ではなく、文字通り「値がない」ことを表します。

データベースで重要な区別であり、検索や分析の際に考慮が必要です。

NULL値が発生する原因

NULL値はさまざまな理由で発生します。

  • データが未知である場合
  • データが適用されない場合
  • 単にデータが欠落している場合

外部データのインポート時にもNULL値が発生することがあります。

データベース設計段階で、NULLを許可するかどうかを決めることが一般的です。

COALESCE関数の基本

こちらでは、COALESCE関数の基本的な概念と使用方法を紹介します。

  • COALESCE関数とは
  • 基本構文と使用方法

COALESCE関数とは

COALESCE関数(コーレス、もしくはコアレス)は、指定された引数リスト内で、最初の非NULL値を返すものです。

すべての引数がNULLの場合は、COALESCE関数もNULLを返します。

例として以下のようなテーブルで試してみましょう。

CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    phone1 VARCHAR(15) NULL,
    phone2 VARCHAR(15) NULL
);

INSERT INTO employees (first_name, last_name, phone1, phone2)
VALUES ('Taro', 'Yamada', '080-1234-5678', NULL),
       ('Hanako', 'Tanaka', NULL, '080-8765-4321'),
       ('Yuki', 'Suzuki', NULL, NULL);

COALESCE関数を使用して、phone1がNULLの場合にphone2の値を取得します。

両方の電話番号がNULLの場合は、”不明”という文字列を返します。

SELECT first_name, last_name, COALESCE(phone1, phone2, '不明') AS primary_phone
FROM employees;

結果は以下のとおりです。

 first_name | last_name | primary_phone 
------------+-----------+---------------
 Taro      | Yamada    | 080-1234-5678
 Hanako    | Tanaka    | 080-8765-4321
 Yuki      | Suzuki    | 不明

以下はブラウザでSQLが試せる無料サイトです。

学習に活用してみてください。

SQL Fiddle - Online SQL Compiler for learning & practice
Discover our free online SQL editor enhanced with AI to chat, explain, and generate code. Support SQL Server, MySQL, Mar...

基本構文と使用方法

COALESCE関数の基本的な構文は次のとおりです

COALESCE(value1, value2, ..., valueN)

関数は引数リストから左から右へと進み、最初に出会った非NULL値を返します。

例えば以下の結果は、「ITC」です。

COALESCE(NULL, 'ITC', NULL)

すべての引数がNULLの場合は、NULLを返します。

COALESCE関数でデフォルト値を設定

こちらでは、COALESCE関数を用いてNULL値に対するデフォルト値を設定する方法を解説します。

  • デフォルト値の設定方法
  • NULL値の検出と置換

デフォルト値の設定方法

COALESCE関数は、デフォルト値を設定する際にも利用できます。

具体的には、関数の最後に、デフォルト値を引数として与える方法です。

以下のようにすると、最初の引数がNULLであるため、結果は’Default Value’になります。

COALESCE(NULL, 'デフォルト値')

NULL値の検出と置換

COALESCE関数を使うと、NULL値を効率よく置換できます。

SELECT COALESCE(列名, 'デフォルト値') FROM テーブル名;

このクエリは、指定した列の値がNULLの場合に’デフォルト値’を返します。

COALESCE関数の応用例

こちらでは、COALESCE関数の応用例を紹介します。

  • 複数列から値を取得
  • 条件付きNULL値の埋め合わせ

複数列から値を取得

COALESCE関数を使用して、複数の列から最初の非NULL値を取得できます。

住所の情報が複数の列に分散して保存されている場合、以下のようにすることで、最初の非NULL住所情報を取得できるのです。

COALESCE(列1, 列2, ..., 'デフォルト住所')

条件付きNULL値の埋め合わせ

COALESCE関数は、CASE文と組み合わせることで、より複雑なNULL値の取り扱いを実現できます。

特定の条件下でのみ、NULL値を置換するといった応用が可能です。

例えば価格が、NULLである場合にだけデフォルト価格を適用する場合、次のようなクエリを書けます。

SELECT COALESCE(CASE WHEN 価格 IS NULL THEN 'デフォルト価格' END, 価格) FROM 商品;

PostgreSQLのCASE文については以下で詳しく解説しています。

ほかのNULL関連関数との比較

こちらでは、ほかのNULL値を操作するための関数とCOALESCE関数との違いについて解説します。

  • COALESCEとNVLの違い
  • COALESCEとNULLIFの違い
  • COALESCEとCASE式の違い

COALESCEとNVLの違い

COALESCEとNVLの主な違いは、以下のとおり。

  • NVL:2つの引数しか受け付けない
  • COALESCE:任意の数の引数を受け付ける

COALESCE関数はより、柔軟な操作が可能です。

COALESCEとNULLIFの違い

NULLIFは、2つの引数を比較し、等しければNULLを返すもの。

それに対し、COALESCEは引数リストの中で最初の非NULL値を返します。

それぞれの目的が異なるのです。

COALESCEとCASE式の違い

COALESCE関数は、内部的にはCASE式と同じように動作しますが、簡単なNULL値の置換ではCOALESCEの方が好まれます。

なぜならCOALESCE関数の方が、シンタックスが簡潔だからです。

複雑な条件付きの置換では、CASE式を使用することが多いです。

まとめ

当記事では、PostgreSQLのCOALESCE関数とその使用方法について解説しました。

NULL値はデータベース作業で頻繁に遭遇するため、それらを適切に扱うための技術は必須です。

COALESCE関数は、NULL値を効率的に管理し、データの完全性を維持する上で非常に有用なツールです。

これらの知識を活用することで、あなたのデータベース操作はより柔軟かつ効率的になるでしょう。

当記事がPostgreSQLを使用する上での理解の一助となれば幸いです。

タイトルとURLをコピーしました