PostgreSQL 結合タイプ:内側、外側、左、右

⚡ スマートサマリー

PostgreSQL 結合は、共有キーを使用して2つ以上のテーブルから行を取得して結合するもので、シータ結合、EQUI結合、ナチュラル結合などの内部結合に加え、左、右、および完全な結果をカバーする外部結合も含まれます。

  • 🔗 組み合わせる: 結合とは、共通のキーに基づいて複数のテーブルの列を結合することです。
  • 🎯 内部結合: 内部結合では、結合条件を満たす行のみが返されます。
  • ⬅️ 左参加: LEFT OUTER JOIN は、左側のテーブルのすべての行を保持し、一致しない右側の行には NULL を追加します。
  • ➡ 右参加: RIGHT OUTER JOIN は、右側のテーブルのすべての行を保持し、一致しない左側の行には NULL を追加します。
  • ???? 完全参加: FULL OUTER JOIN は、一致する行が存在しない場合に NULL が含まれる、両方のテーブルのすべての行を返します。
  • 🤖 AIヘルプ: AIアシスタントが適切な結合タイプを選択し、ON条件を記述します。

PostgreSQL 結合の種類

結合とは PostgreSQL?

PostgreSQL ジョイン 複数のテーブルからデータを取得するために使用します。JOINを使用すると、SELECT文とJOIN文を1つの文にまとめることができます。JOIN条件が文に追加され、条件を満たすすべての行が返されます。異なるテーブルの値は、共通の列に基づいて結合されます。共通の列は、通常、最初のテーブルの主キーと2番目のテーブルの外部キーです。

PostgreSQL 結合の種類

結合には 2 種類あります PostgreSQL:

  • 内部結合
  • 外部結合

PostgreSQL 内部結合

内部結合には 3 種類あります PostgreSQL:

  • シータ参加
  • 自然結合
  • EQUI結合

シータ結合

シータ結合を使用すると、シータで表される条件に基づいて 2 つのテーブルを結合できます。シータ結合はすべての比較演算子で機能します。ほとんどの場合、シータ結合は内部結合と呼ばれます。

シータ結合は、最も基本的なタイプの JOIN です。 JOIN 条件が満たされるテーブルからすべての行が返されます。

構文:

SELECT columns
FROM table-1
INNER JOIN table-2
ON table-1.column = table-2.column;

デモ データベースの次のテーブルを検討してください。

本:

PostgreSQL シータ結合

価格:

PostgreSQL シータ結合

各書籍の名前と対応する価格を確認したい場合、次のコマンドを実行します。

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

次のように返されます。

PostgreSQL シータ結合

結合条件を満たした行は 3 行だけでした。

EQUI結合

EQUI 結合は、主キーと外部キーの関係に基づいて XNUMX つのテーブルを結合する方法を提供します。 例えば:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

次のように返されます。

PostgreSQL EQUI結合

レコードは、共通の列、つまり id 列に基づいて両方のテーブルから返されました。

自然結合

このタイプの結合は、EQUI 結合を記述する別の方法を提供します。 以下に示すように NATURAL キーワードを追加することで、前の例を改善できます。

SELECT *
FROM Book
NATURAL JOIN Price;

次のように返されます。

PostgreSQL 自然結合

ID 列が XNUMX つだけ返されました。 NATURAL JOIN では、id 列が XNUMX つのテーブルで共通であることがわかりました。 返品されたのはXNUMX枚だけでした。

PostgreSQL アウタージョイン

外部結合には 3 種類あります PostgreSQL:

  • 左外部結合
  • 右外部結合
  • 完全外部結合

PostgreSQL 左外部結合

LEFT OUTER JOIN は、左側のテーブルのすべての行を返し、右側のテーブルでは結合条件が満たされた行のみを返します。

構文:

SELECT columns
FROM table-1
LEFT OUTER JOIN table-2
ON table-1.column = table-2.column;

各書籍の名前と対応する価格を確認する必要があります。次のコマンドを実行します。

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

これにより、次が返されます。

PostgreSQL 左外部結合

Book テーブルの 4 行すべてが返されました。 Price テーブルの 3 行のみが結合条件を満たしました。 したがって、彼らは返されました。 最後の本には対応する価格がありません。

PostgreSQL 右外部結合

RIGHT OUTER JOIN は、結合条件が満たされている右側のテーブル内のすべての行と左側のテーブル内の行を返します。

構文:

SELECT columns
FROM table-1
RIGHT OUTER JOIN table-2
ON table-1.column = table-2.column;

具体的な例を挙げますと、以下の通りです。

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

これにより、次が返されます。

PostgreSQL 右外部結合

Priceテーブルのすべての行が返されました。Bookテーブルでは、結合条件を満たした行のみが返されました。3行目は一致する行が見つからなかったため、nameの値が空になっています。

完全外部結合 PostgreSQL

このタイプの JOIN は、結合条件が満たされない場合、左側のテーブルのすべての行と右側のテーブルのすべての行を null で返します。

構文:

SELECT columns
FROM table-1
FULL OUTER JOIN table-2
ON table-1.column = table-2.column;

具体的な例を挙げますと、以下の通りです。

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

これにより、次が返されます。

PostgreSQL 完全外部結合

すべてのテーブルのすべての行が返され、一致するものが見つからなかった場合は null が返されます。

pgAdminの使用

上記のタスクは、pgAdminで以下のように実行できます。以下のセクションでは、各結合タイプについて手順を追って説明します。

pgAdmin 内部結合

以下の手順は、pgAdminで各内部結合バリアントを実行する方法を示しています。

Theta の使い方 PostgreSQL pgAdminを使用する

Theta Join を使用する手順は以下のとおりです。 PostgreSQL pgAdminを使用して:

ステップ 1) pgAdmin アカウントにログインします。

pgAdmin を開き、資格情報を使用してログインします。

ステップ 2) デモデータベースを作成する

  • 左側のナビゲーション バーで、[データベース] をクリックします。
  • 「デモ」をクリックします。

pgAdmin 内部結合

ステップ 3) クエリを入力します

クエリ エディターに次のクエリを入力します。

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

ステップ 4) クエリを実行する

「実行」ボタンをクリックします

pgAdmin 内部結合

次のような結果が返されます。

pgAdmin 内部結合

EQUI結合

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  • 左側のナビゲーション バーで、[データベース] をクリックします。
  • 「デモ」をクリックします。

pgAdmin EQUI 参加

ステップ3) クエリ エディターにクエリを入力します。

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

ステップ4) 「実行」ボタンをクリックします。

pgAdmin EQUI 参加

次のような結果が返されます。

pgAdmin EQUI 参加

自然結合

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  • 左側のナビゲーション バーで、[データベース] をクリックします。
  • 「デモ」をクリックします。

pgAdmin 自然結合

ステップ3) クエリ エディターにクエリを入力します。

SELECT *
FROM Book
NATURAL JOIN Price;

ステップ4) 「実行」ボタンをクリックします。

pgAdmin 自然結合

次のような結果が返されます。

pgAdmin 自然結合

pgAdmin 単純な内部結合

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  • 左側のナビゲーション バーで、[データベース] をクリックします。
  • 「デモ」をクリックします。

pgAdmin 単純な内部結合

ステップ3) クエリ エディターにクエリを入力します。

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

ステップ4) 「実行」ボタンをクリックします。

pgAdmin 単純な内部結合

次のような結果が返されます。

pgAdmin 単純な内部結合

pgAdmin 外部結合

次に、以下の手順に従って、pgAdminで3つの外部結合バリアントを実行します。

左外部結合

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  • 左側のナビゲーション バーで、[データベース] をクリックします。
  • 「デモ」をクリックします。

pgAdmin 左外部結合

ステップ3) クエリ エディターにクエリを入力します。

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

ステップ4) 「実行」ボタンをクリックします。

pgAdmin 左外部結合

次のような結果が返されます。

pgAdmin 左外部結合

右外部結合

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  • 左側のナビゲーション バーで、[データベース] をクリックします。
  • 「デモ」をクリックします。

pgAdmin 右外部結合

ステップ3) クエリ エディターにクエリを入力します。

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

ステップ4) 「実行」ボタンをクリックします。

pgAdmin 右外部結合

次のような結果が返されます。

pgAdmin 右外部結合

完全外部結合

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  • 左側のナビゲーション バーで、[データベース] をクリックします。
  • 「デモ」をクリックします。

pgAdmin 完全外部結合

ステップ3) クエリ エディターにクエリを入力します。

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

ステップ4) 「実行」ボタンをクリックします。

pgAdmin 完全外部結合

次のような結果が返されます。

pgAdmin 完全外部結合

このチュートリアルで使用するデータベースをダウンロードする

よくあるご質問

INNER JOINは、両方のテーブルで一致する行のみを返します。OUTER JOINは、一致しない行も保持し、欠落している列にはNULL値を挿入します。また、保持するテーブルに応じて、左結合、右結合、または全結合のいずれかになります。

JOINは、一致するキーを使用して異なるテーブルの列を横に並べて結合し、各行の幅を広げます。UNIONは、2つの結果セットの行を縦に積み重ね、同じ数の列が必要です。

自己結合は、2つのテーブルエイリアスを使用してテーブルを自身と結合します。これは、同一テーブル内の行を比較する場合、例えば、同じテーブルに格納されている従業員とマネージャーを照合する場合などに便利です。

クロス結合は、最初のテーブルのすべての行と2番目のテーブルのすべての行をペアにしたデカルト積を返します。ON条件を使用しないため、非常に大きな結果セットを迅速に生成できます。

はい。1つのクエリ内で複数のJOIN句を連結し、それぞれの追加テーブルに別のJOIN句とON条件を追加することができます。 PostgreSQL それらを評価して、単一の統合結果セットを作成します。

GitHub CopilotのようなAIアシスタントは、適切な結合タイプを提案し、外部キーからON条件を書き込み、意図しないデカルト積を引き起こす可能性のある欠落した条件を警告することで、よくある結合ミスを減らします。

はい。AIアシスタントはクエリプランを読み取り、結合列にインデックスを推奨したり、結合順序や条件を書き換えたりすることができます。ただし、データベースは依然として正確性を強制するため、本番環境で実行する前に各提案を確認してください。

単一の結合方法が常に最速というわけではありません。パフォーマンスは、インデックス、行数、フィルタによって異なります。インデックス付きキーに対する内部結合は通常効率的ですが、インデックスのない大規模なテーブルに対する完全外部結合は、一般的に最もコストがかかります。