質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

5回答

14798閲覧

完全外部結合(full outer join)の使い道について

biz_sny

総合スコア19

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

1グッド

2クリップ

投稿2016/11/26 06:21

業務でPostgreSQLを数年使っていますが、
いまだに完全外部結合(full outer join)を使ったことがありません。
こんな時に使うと便利、こんな要求があり使いました等ありましたら教えてください。

maisumakun👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

他の回答者様も言及してますが、
当方としてもFULL JOINを利用する機会は数えるほど出て来るかどうかといった印象です。

またUNION、LEFT JOIN、RIGHT JOINの合わせ技で、
同じようなデータの抜き方は可能なので、必ず必要とまでも言えません。
(現にFULL JOINをサポートしないDBMSも存在しますし。ただ完全外部結合は標準SQLには定義されているため、実装するDBMSの方が多いと思われます。)

#FULL JOINのメリット
ではFULL JOINのメリットは何か?
当方の私見も入ってますが結局の所は、

  • コードの記述量の削減
  • 意図の明示化(完全外部結合知ってたら意図がすぐに解る)

この2点につきるのではないかと思います。
(CROSS JOINに関しては直積ですよ、という意図を明示するためだけの書き方なのかなと勝手に思ってます。)

そのため用意できるなら、
用意してくれていた方が都合が良い、というのが当方の見解です。
(くどいですが標準SQLには定義されてるので・・・)

少し脱線しますが、SQLも簡潔に書くための実装(ウィンドウ関数、CTE、行値構成子など)のサポートを着実に進めてきているので、
これらの簡潔に書くための手段を知っておいて損はないかと思います。

#どういった場面で使用する?
当方も利用機会は少ないので、
あくまで一例として何か挙げるなら、
予算・実績比較レポートの作成などでは利用されやすいのではないかなと思います。
(予算と実績テーブルが分かれている場合)

予実比較の場合だと、
予算のたてられていない実績の情報、
予算はたてられたけど実績がまだない情報
のどちらも一覧で出して欲しいというケースも想定されるので、
そのような場面ではFULL JOINも有力な選択肢になり得ると思います。

ご参考までに・・・。

投稿2016/11/28 10:46

編集2016/11/28 10:51
Panzer_vor

総合スコア1636

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

前に全てのトランザクションデータとマスタデータが「年、月、バージョン」を持っているシステムがあり、
トランザクションデータとマスタデータを結合するときは同じ「年、月、バージョン」があればそれで結合し、
同じ「年、月、バージョン」がない場合は直近の過去の「年、月、バージョン」で結合し、
過去にない場合は直近の未来の「年、月、バージョン」で結合する仕様だったのでFULL JOIN使いまくりでした。

投稿2016/12/16 15:24

Soka_Taisa

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

本来であればリレーションするのですから片方のテーブルのデータが
もう一方のデータを包含するような設計をするので、
あまりFULL OUTER JOINを利用する機会はないかもしれませんね
2つのテーブルに直接的な相関関係がない集計をする必要もあるので
実装されていたほうが便利なのでしょうけど、代替方法もあるのでさほど重要ではありません

投稿2016/11/28 01:16

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

過去に何度が使った事はありますが、業務の中で使っているケースは、無かった様に思います。
テスト、検証の際に、新旧や結果の比較の時に、diffの様に使った事は有ります。
LEFTとRIGHTを2回行えば良いですが。
CROSS JOINも使った事ほとんどありません。

投稿2016/11/27 00:39

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

実際に FULL OUTER JOIN を使う機会は少ないようですが、テーブルを外部結合する の実例を比較すると2つのテーブルのどちらにキーがあってもSELECTされるので、こんな使い方もあるよ、って理解できるでしょう。

投稿2016/11/26 20:28

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問