0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

looking back this year for my techAdvent Calendar 2019

Day 10

OracleDB それぞれのJOINの使いどころ

Last updated at Posted at 2019-12-09

概要

複数のテーブルの情報を結合する際に使われる JOIN ですが、
結合のルールなどで使い方が異なります。

CROSS JOIN などあまり使われてないイメージのあるものを使う機会があったので、
それぞれの使いどころをメモしておこうと思う。

INNNER JOIN

クエリ例
SELECT TABLE1.*,TABLE2.* FROM TABLE1 JOIN TABLE2 ON TABLE1.KEY = TABLE2.KEY 
  • よく使われるイメージがある
  • ON~ の条件で結合するデータのみ抽出する

LEFT JOIN

クエリ例
SELECT TABLE1.*,TABLE2.* FROM TABLE1 LEFT JOIN TABLE2 ON TABLE1.KEY = TABLE2.KEY 
  • これもよく使われるイメージがある
  • TABLE1 のデータは全件表示し、ON~ の条件で結合したデータについては TABLE2 のデータも抽出する
    • TABLE2 のみ存在するデータの行は抽出されない
    • TABLE1 を基準にして表を作るイメージ

RIGHT JOIN

クエリ例
SELECT TABLE1.*,TABLE2.* FROM TABLE1 RIGHT JOIN TABLE2 ON TABLE1.KEY = TABLE2.KEY 
  • TABLE2 のデータは全件表示し、ON~ の条件で結合したデータについては TABLE1 のデータも抽出する
    • TABLE1 のみ存在するデータの行は抽出されない
    • TABLE2 を基準にして表を作るイメージ
    • LEFT JOIN とは表示の基準が逆になる

FULL JOIN

クエリ例
SELECT TABLE1.*,TABLE2.* FROM TABLE1 FULL JOIN TABLE2 ON TABLE1.KEY = TABLE2.KEY 
  • TABLE1,TABLE2 のデータをどちらも全件表示し、ON~ の条件で結合したデータについては同一行でデータを抽出する
    • TABLE1 もしくは TABLE2 のみ存在するデータも抽出される
    • LEFT JOIN と RIGHT JOIN を合わせて、重複を削除すると FULL JOIN で抽出する内容と同じになる
  • 目標データと実績データのテーブルを結合した際に、目標もしくは実績データのみのデータも落とさずに表示したいときに使った

TABLE1(目標データ)

KEY TARGET
A 100
B 50
C 80

TABLE2(実績データ)

KEY RESULT
A 200
B 100
D 150

FULL JOINでの結合後(KEYを結合キーとして利用)

KEY TARGET RESULT
A 200 200
B 50 100
C 80
D 150

CROSS JOIN

クエリ例
SELECT TABLE1.*,TABLE2.* FROM TABLE1 CROSS JOIN TABLE2
  • TABLE1,TABLE2 の組み合わせたデータを全通り抽出する
    • 表示されるデータ数は (TABLE1 のデータ数) × (TABLE2 のデータ数)
  • 基準となる指標ごとに実データを利用して算出を行っていくための準備としてデータと指標の組み合わせを抽出する時に使った

TABLE1(指標)

BASE
目標
実績
達成率

TABLE2(実データ)

KEY TARGET RESULT
A 200 200
B 50 100

CROSS JOINでの結合後

BASE KEY TARGET RESULT
目標 A 200 200
目標 B 50 100
実績 A 200 200
実績 B 50 100
達成率 A 200 200
達成率 B 50 100

まとめ

個人的にはCROSS JOIN や FULL JOIN の使いどころはあまりないのかと思ってたけど、
業務の中で使う機会が出てきたことに驚きがあったので、メモしておこうと思いました。

もしかしたら、使わずにすむ最善の方法があったのかもしれないけど。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?