LoginSignup
3
0

More than 3 years have passed since last update.

【SQL】自己結合について

Posted at

自己結合について学習したことをまとめています。

自己結合の概要

同一テーブルに対する結合です。
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
国語 国語
数学 国語
数学 数学
英語 国語
英語 数学
英語 英語
3
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
3
0