1-2 自己結合の使い方

重複順列・順列・組み合わせ

順列対

クロス結合して単純に直積を作れば得られる。

順序対から重複を排除

結合条件によって、同一要素の組み合わせを排除。 2つのテーブルが実際に存在すると想像することがポイント。

組み合わせ

等号「=」以外の比較演算子である<や>, <>を使って行う結合を「 **非等値結合** 」と言う。

重複行を削除する

自己相関サブクエリを使って重複を削除。 SQLの動作を考える際に、データの記憶方法(テーブル、ビュー)を考慮する必要はない。どちらも等しく「集合」(関係)。

部分的に不一致なキーの検索

自己非等値結合を使う。 結合の代わりに、相関サブクエリを使っても書ける。この場合、DISTINCTが不要になる。

ランキング

自己非等値結合を使う。 「同心円的な」(セルコ)再帰的集合を作る。

※ 結合条件に合致しない場合も結果に反映させるために、内部結合ではなく外部結合を使っている。

同順位が続いた後に順位を飛ばす

COUNTで件数をだし、順位に使う。

連続的に出力する

COUNTの対象をDISTINCTにすることで対応。

まとめ

自己結合はとても強力だけど、異なるテーブル同士を対象に行う結合に比べてコスト高。 ※ 特に非等値結合と組み合わせる場合。

自己結合で使用する結合キーは、なるべく主キーを使うか、インデックスを作成しておく。

本当に異なるテーブルを結合していると理解しやすい。