◾️はじめに
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 で試した
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 | 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