自己結合について学習したことをまとめています。
自己結合の概要
同一テーブルに対する結合です。
1つのテーブルがあたかも2つあると考えることが重要です。
自己結合でできること
できること | 意味 | 実現方法 |
---|---|---|
順列 | <1, 2>と<2, 1>を区別する順列対 | 結合条件に「<>」を使用する自己非同値結合 |
重複順列 | 重複を含む順列対 | 自己クロス結合 |
組み合わせ | {1, 2}と{2, 1}を同じものとみなす非順列対 | 結合条件に「>」を使用する自己非同値結合 |
重複組み合わせ | 重複を含む非順列対 | 結合条件に「>=」を使用する自己非同値結合 |
自己結合でできることの例
下記Subjectsテーブルを例に自己結合でできることの例を記載します。
name | score |
---|---|
国語 | 85 |
数学 | 90 |
英語 | 55 |
順列
結合条件に「<>」を使用する自己非同値結合を利用して順列を作成します。
順列の例
SELECT
S1.name AS name1,
S2.name AS name2
FROM
Subjects S1
INNER JOIN Subjects S2 ON S1.name <> S2.name
SQL実行結果
name1 | name2 |
---|---|
国語 | 数学 |
国語 | 英語 |
数学 | 国語 |
数学 | 英語 |
英語 | 国語 |
英語 | 数学 |
重複順列
自己クロス結合を利用して重複を含む順列を作成します。
重複順列の例
SELECT
S1.name AS name1,
S2.name AS name2
FROM
Subjects S1
CROSS JOIN Subjects S2;
SQL実行結果
name1 | name2 |
---|---|
国語 | 国語 |
国語 | 数学 |
国語 | 英語 |
数学 | 国語 |
数学 | 数学 |
数学 | 英語 |
英語 | 国語 |
英語 | 数学 |
英語 | 英語 |
組み合わせ
結合条件に「>」を使用する自己非同値結合を利用して組み合わせを作成します。
組み合わせの例
SELECT
S1.name AS name1,
S2.name AS name2
FROM
Subjects S1
INNER JOIN Subjects S2 ON S1.name > S2.name;
SQL実行結果
name1 | name2 |
---|---|
数学 | 国語 |
英語 | 国語 |
英語 | 数学 |
重複組み合わせ
結合条件に「>=」を使用する自己非同値結合を利用して重複を含む
重複組合せの例
SELECT
S1.name AS name1,
S2.name AS name2
FROM
Subjects S1
INNER JOIN Subjects S2 ON S1.name >= S2.name;
SQL実行結果
name1 | name2 |
---|---|
国語 | 国語 |
数学 | 国語 |
数学 | 数学 |
英語 | 国語 |
英語 | 数学 |
英語 | 英語 |