2017/12/07
本記事では、少し特殊な結合である自己結合について解説します。
自己結合は、少々イメージしづらい結合です。
ですので、処理イメージを交えて解説していきたいと思います。
sponsored link
自己結合とは
自己結合とは、同じテーブル同士で結合することを指します。
項目は同じ項目同士で比較することもありますし、異なる項目で比較することもあります。
比較的理解しやすい異なる項目で比較について、基本的な使い方は以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
-- テーブル A B C --- ------- ---- 001 AAAAAAA 003 002 BBBBBBB 003 003 CCCCCCC NULL -- 自己結合 SELECT t1.a a1 ,t1.b b1 ,t1.c c1 ,t2.a a2 ,t2.b b2 ,t2.c c2 FROM test_table t1 ,test_table t2 WHERE t1.c = t2.a ; A1 B1 C1 A2 B2 C2 --- ------- ---- --- ------- ---- 001 AAAAAAA 003 003 CCCCCCC NULL 002 BBBBBBB 003 003 CCCCCCC NULL |
処理イメージ
通常の結合に比べて、やはり少しイメージすることが難しいと思います。
そのため、処理のイメージを以下にまとめました。
(あくまでもイメージで、実際のORACLE内での動作ではありません)
まずは、単純に直積(結合条件なし)をしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
-- テーブル A B C --- ------- ---- 001 AAAAAAA 003 002 BBBBBBB 003 003 CCCCCCC NULL SELECT t1.a a1 ,t1.b b1 ,t1.c c1 ,t2.a a2 ,t2.b b2 ,t2.c c2 FROM test_table t1 ,test_table t2 ; A1 B1 C1 A2 B2 C2 --- ------- ---- --- ------- ---- 001 AAAAAAA 003 001 AAAAAAA 003 001 AAAAAAA 003 002 BBBBBBB 003 001 AAAAAAA 003 003 CCCCCCC NULL 002 BBBBBBB 003 001 AAAAAAA 003 002 BBBBBBB 003 002 BBBBBBB 003 002 BBBBBBB 003 003 CCCCCCC NULL 003 CCCCCCC NULL 001 AAAAAAA 003 003 CCCCCCC NULL 002 BBBBBBB 003 003 CCCCCCC NULL 003 CCCCCCC NULL |
その後に、条件をつけて対象を絞ってみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
-- 条件【t1.c = t2.a (C1 = A2)】 A1 B1 C1 A2 B2 C2 --- ------- ---- --- ------- ---- 001 AAAAAAA 003 001 AAAAAAA 003 ← × 001 AAAAAAA 003 002 BBBBBBB 003 ← × 001 AAAAAAA 003 003 CCCCCCC NULL ← ○ 002 BBBBBBB 003 001 AAAAAAA 003 ← × 002 BBBBBBB 003 002 BBBBBBB 003 ← × 002 BBBBBBB 003 003 CCCCCCC NULL ← ○ 003 CCCCCCC NULL 001 AAAAAAA 003 ← × 003 CCCCCCC NULL 002 BBBBBBB 003 ← × 003 CCCCCCC NULL 003 CCCCCCC NULL ← × ↓↓↓ A1 B1 C1 A2 B2 C2 --- ------- ---- --- ------- ---- 001 AAAAAAA 003 003 CCCCCCC NULL 002 BBBBBBB 003 003 CCCCCCC NULL |
途中の直積をした後、対象を絞るという処理イメージをすることで、自己結合の動作が分かりやすくなります。
まとめ
同じテーブル同士の結合である自己結合について見てきました。
自己結合は、イメージがしづらいという欠点がありますが、理解すると様々な便利な使い方が出来ます。
ぜひ理解しておきましょう。
関連(自己結合の使用例)
関連(結合)