以下の内容はhttps://dk521123.hatenablog.com/entry/2025/09/03/093606より取得しました。


【SQL】テーブルの結合 ~ 完全外部結合・FULL JOIN ~

◾️はじめに

https://dk521123.hatenablog.com/entry/2010/02/05/131206
https://dk521123.hatenablog.com/entry/2012/05/06/212246

の続き。

 今更ながらだが、
完全外部結合(FULL OUTER JOIN)について扱う

目次

【1】完全外部結合(FULL OUTER JOIN)
【2】イメージ
【3】サンプル
 1)サンプルデータ
 2)SQL

【1】完全外部結合(FULL OUTER JOIN)

* 2テーブルを互いに全件外部結合する方法
* 左テーブルのマッチしないレコードと
 右テーブルのマッチしないレコードも取得可能
 =>「全件外部結合する」=
   [左テーブルと右テーブルの共通]
   + [左テーブルの共通外]
   + [右テーブルの共通外]

【2】イメージ

* 集合Aと集合Bとあったら、
 FULL OUTER JOINは集合Aと集合B全てを網羅
 => 以下の図が分かりやすい

http://dbm.mmp-inc.co.jp/wp-content/uploads/2023/04/image-2-1536x864.png

【3】サンプル

* PostgreSQL v17 で試した

https://www.db-fiddle.com

1)サンプルデータ

user

CREATE TABLE "user"
(
  user_id VARCHAR(10) NOT NULL,
  gender VARCHAR(10) NOT NULL,
  remarks VARCHAR(20) NULL
);

-- データの挿入
INSERT INTO
  "user" (user_id, gender, remarks)
VALUES
    ('00001', 'male', 'Hello')
    , ('00002', 'female', 'World')
    , ('00003', 'male', NULL)
;

user_pii

CREATE TABLE user_pii
(
  user_id VARCHAR(10) NOT NULL,
  name VARCHAR(10) NOT NULL,
  email VARCHAR(20) NOT NULL
);

-- データの挿入
INSERT INTO
  user_pii (user_id, name, email)
VALUES
    ('00001', 'Mike', 'demo1@sample.com')
    , ('00003', 'Tom', 'demo3@sample.com')
    , ('00004', 'Naomi', 'demo4@sample.com')
    , ('00005', 'Smith', 'demo5@sample.com')
;

2)SQL

SELECT
  COALESCE(u.user_id, pi.user_id) AS user_id,
  pi.name,
  u.gender,
  pi.email,
  u.remarks
FROM
  "user" u
FULL OUTER JOIN
  user_pii pi
ON
  u.user_id = pi.user_id
;

Result

user_id name gender email remarks
00001 Mike male demo1@sample.com Hello
00002 female World
00003 Tom male demo3@sample.com
00004 Naomi demo4@sample.com
00005 Smith demo5@sample.com

参考文献

https://sql55.com/t-sql/t-sql-join-5.php

関連記事

テーブルの結合 ~ 内部結合・INNER JOIN ~
https://dk521123.hatenablog.com/entry/2010/02/05/131206
テーブルの結合 ~ 外部結合・LEFT/RIGHT JOIN ~
https://dk521123.hatenablog.com/entry/2012/05/06/212246
テーブルの結合 ~交差結合・CROSS JOIN~
https://dk521123.hatenablog.com/entry/2011/12/21/000000
テーブルの結合 ~完全結合・Union / Union All ~
https://dk521123.hatenablog.com/entry/2010/03/28/162247
テーブルの結合 ~完全結合・Union / Union All ~
https://dk521123.hatenablog.com/entry/2010/03/28/162247
全く関係ないテーブルを結合することを考える
https://dk521123.hatenablog.com/entry/2021/09/16/185552
SQL ~ 関係演算 / 集合論
https://dk521123.hatenablog.com/entry/2023/01/16/000000
Snowflake ~ 関係演算 / 集合論
https://dk521123.hatenablog.com/entry/2024/09/12/003814
SQL ~ 集合演算の応用 ~
https://dk521123.hatenablog.com/entry/2024/09/16/223305




以上の内容はhttps://dk521123.hatenablog.com/entry/2025/09/03/093606より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14