第1部 魔法のSQL 1-2 自己結合の使い方|達人に学ぶSQL徹底指南書
1-2 自己結合の使い方
重複順列・順列・組み合わせ
順列対
クロス結合して単純に直積を作れば得られる。
順序対から重複を排除
結合条件によって、同一要素の組み合わせを排除。 2つのテーブルが実際に存在すると想像することがポイント。
組み合わせ
等号「=」以外の比較演算子である<や>, <>を使って行う結合を「 **非等値結合** 」と言う。や>
重複行を削除する
自己相関サブクエリを使って重複を削除。 SQLの動作を考える際に、データの記憶方法(テーブル、ビュー)を考慮する必要はない。どちらも等しく「集合」(関係)。
部分的に不一致なキーの検索
自己非等値結合を使う。 結合の代わりに、相関サブクエリを使っても書ける。この場合、DISTINCTが不要になる。
ランキング
自己非等値結合を使う。 「同心円的な」(セルコ)再帰的集合を作る。
※ 結合条件に合致しない場合も結果に反映させるために、内部結合ではなく外部結合を使っている。
同順位が続いた後に順位を飛ばす
COUNTで件数をだし、順位に使う。
連続的に出力する
COUNTの対象をDISTINCTにすることで対応。
まとめ
自己結合はとても強力だけど、異なるテーブル同士を対象に行う結合に比べてコスト高。 ※ 特に非等値結合と組み合わせる場合。
自己結合で使用する結合キーは、なるべく主キーを使うか、インデックスを作成しておく。
本当に異なるテーブルを結合していると理解しやすい。
Link
Latest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型