SQLShack (日本語)

この記事では、例を含む完全な概要を説明します。完全、右、左の外部結合を含むSQL外部結合の概要、およびSQLの左外部結合と右外部結合の結合をカバーします。

複数からデータを取得するプロセスを理解することが重要です。テーブル。初心者は、SQLServerでの結合についての考えを持っていない可能性があります。このヒントでは、SQL結合の概要を説明し、SQL OUTER JOINとその構文、例、および使用例を学習します。

リレーショナルデータベースシステムでは、原則に従うことがベストプラクティスです。正規化では、基本的に、大きなテーブルを小さなテーブルに分割します。 selectステートメントでは、結合を使用してこれらのテーブルからデータを取得できます。テーブルを結合して、結果セットのこれらのテーブルから必要なフィールドを取得できます。これらのテーブルには、相互に関連するいくつかの共通フィールドが必要です。データが複数のデータベースに分割されている場合があり、非常に複雑な構造である場合もあります。結合を使用すると、複数のテーブルやデータベースのデータをユーザーフレンドリーな方法で結合し、アプリケーションでこのデータを表すことができます。

次の画像を使用してSQLJOINを表すことができます

SQLServerでは多くのSQL結合タイプを使用できます。次の画像では、SQL結合のカテゴリを確認できます。

次のセクションで、SQL外部結合について詳しく見ていきましょう。

SQL OUTERJOINの概要

SQL OUTER JOINを使用して、テーブル間の行を照合します。一方または両方のテーブルから、一致する行と一致しない行を取得したい場合があります。次の3種類のSQL外部結合があります。

  1. SQL完全外部結合
  2. SQL左外部結合
  3. SQL右外部結合

例を使用して各SQL外部結合を調べてみましょう。

SQL完全外部結合

SQL完全外部結合には、両方のテーブルのすべての行が含まれます。 。一致しない行がある場合は、NULL値が表示されます。

例を使用して効率的に理解できます。サンプルテーブルを作成して、そこにデータを挿入しましょう。

両方のテーブルの次のデータモデルを参照できます。

次のスクリプトを使用してEmployeeテーブルにデータを挿入します。

部門テーブルにデータを挿入します

ベン図を使用して、2つのテーブル間の論理関係を表すことができます。ベン図では、複数の重なり合う円が含まれ、各円はエンティティまたはテーブルを表します。ベン図の共通領域または重複領域は、両方のテーブル間の共通値を表します。

たとえば、次のスクリーンショットでは、2つの重なり合う円があります。各サークルはテーブル(従業員と部門)に憤慨しています。次の例を使用して、完全外部結合を理解しましょう。

両方のテーブルに共通のフィールド(EmpID)があります。したがって、この列でテーブルを結合できます。次のクエリでは、部門と従業員テーブルの間のFULL OUTER JOINを、両方のテーブルのEMPID列に定義しました。

1
2
3

SELECT *
FROM従業員
Employee.EmpID = Departments.EmpID; ONの完全な外部結合部門

SQL完全外部結合は出力に次の行を提供します

  • 両方のテーブル間で一致する行
  • 両方のテーブルからの一致しない行(NULL値)

このクエリを実行して、完全外部結合クエリの出力を返します。次の出力が得られます。

NULL値のレコードもいくつか表示されます。ベン図を使用して、これをよりよく理解しましょう。

次のスクリーンショットでは、次の情報を確認できます

  • EmpID 1、2、3、4、5 、6,10は、EmployeeテーブルとDepartmentsテーブルの両方に存在します。フル外部結合クエリの出力では、両方のテーブルからのデータを含むこれらすべての行を取得します。
  • EmpID 7、8、9はEmployeeテーブルには存在しますが、Departmentsテーブルには存在しません。部門テーブルに一致する行は含まれていません。したがって、これらのレコードのNULL値を取得します

ここで、デモの目的で、Departmentsテーブルにもう1つのレコードを挿入しましょう。 。このクエリでは、Employeeテーブルに存在しないEmpID11を挿入します。

SQL完全外部結合クエリを再実行します。次の画像では、NULL値を持つ追加の行が1つあります。従業員テーブルにEmpID11に一致する行がありません。このため、出力でNULL値を取得します。

要約すると、次のベン図を使用してSQL完全外部結合を表すことができます。フル外部結合の出力の強調表示された領域に表示されているものを取得します。

SQL FULL OUTERJOINおよびWHERE句

SQL FULL OUTER JOINを使用してWHERE句を追加し、両方の結合テーブル間で一致するデータがない行を取得できます。

次のクエリでは、where句をに追加します。 NULL値を持つレコードのみを表示します。

1
2
3
4
5

SELECT *
FROM従業員
Employee.EmpID = Departments.EmpID
WHERE Employee.EmpID IS NULL
またはDepartments.EmpIDISNULLの完全外部結合部門。

このコマンドを実行して、出力を表示します。 EmployeeテーブルとDepartmentsテーブルのどちらにも一致しない行のみを返します。

SQL LEFT OUTER JOIN

SQLの左外部結合では、出力に次の行が表示されます。

  • 両方のテーブル間で一致する行の出力が表示されます
  • 一致するレコードがない場合左側の表から、NULL値を持つレコードも表示されます

次のコードを実行して、SQL LEFT OUTERJOIN出力を返します

1
2
3

SELECT *
FROM Employee
LEFT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

次の画像では、EmpID 7、8、および9にNULL値があることがわかります。これらのEmpIDは右側に存在しません。部門テーブル。

Joinステートメントのテーブル配置位置に注意する必要があります。現在、左側にEmployeeテーブルがあり、右側にDepartmentsテーブルがあります。

クエリを書き直して、クエリ内のテーブルの位置を入れ替えましょう。このクエリでは、Departmentテーブルが左側にあるため、Left Outer Joinはこのテーブルの値を確認し、不一致の場合はNULL値を返す必要があります。

次のスクリーンショットでは、次のことができます。 EmpID11のNULL値が1つだけであることを確認してください。これはEmpID11がEmployeeテーブルで使用できないためです。

As要約すると、次のベン図を使用してSQLの左外部結合を表すことができます。 SQL左外部結合の出力で強調表示された領域が表示されます。

SQL右外部結合

SQL右外部結合では、出力に次の行が表示されます。

  • 両方のテーブル間で一致する行の出力が表示されます
  • から一致するレコードがない場合右側のテーブルには、NULL値を持つレコードも表示されます

次のクエリを実行して、右外部結合の出力を取得します

1
2
3

SELECT *
FROM Employee
RIGHT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

次の画像では、一致するすべての行と、NULL値を持つ1つの行を取得していることがわかります。従業員テーブルに存在しないため、NULL値の行にはEmpID11があります。また、Departmentテーブルの位置がJoinの正しい位置にあることもわかります。このため、従業員テーブル(左側)から部門テーブル(右側)と一致しない値を取得しません。

前に強調したように、テーブルの位置はJOINステートメントで重要です。テーブルの位置を変更すると、異なる出力が得られます。次のクエリには、Departmentsテーブル(左)とEmployeeテーブル(右)があります。

1
2
3
4

SELECT *
FROM Departments
RIGHT OUTER JOIN Employee ON Departments.EmpID = Employee.EmpID

上記のクエリでテーブルの位置を入れ替えた後、右外部結合の違いに気付くことができます。

要約すると、次のベン図を使用してSQL右外部結合を表すことができます。 SQL右外部結合の出力で強調表示された領域が表示されます。

SQL左外部結合とSQL右外部結合の結合結合

前の例では、SQLの左外部結合とSQLの右外部結合についてさまざまな例で説明しました。 SQL左外部結合とSQL右外部結合の両方の結果の結合を行うことができます。 SQL完全外部結合の出力を提供します。

SQL完全外部結合の代わりに次のクエリを実行します。

1
2
3
4
5
6
7

SELECT *
FROM Employee
LEFT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID
UNION ALL
SELECT *
FROM Employee
RIGHT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

次の出力では、すべてを取得します。一致するレコード、左側のテーブルの一致しないレコード、および右側のテーブルの一致しないレコード。これは、SQL完全外部結合の出力に似ています。

結論

この記事では、 SQL外部結合とそのタイプを例とともに調べました。この記事がお役に立てば幸いです。以下のコメントでお気軽にフィードバックをお寄せください。

  • 作成者
  • 最近の投稿
インドのグルガオンでMCSA認定およびMicrosoft認定トレーナーとして13年の経験を持つラジェンドラは、パフォーマンスの最適化、監視、高可用性、ディザスタリカバリの戦略と実装に焦点を当てたさまざまな大企業で働いています。彼は、SQL Server、Azure、MySQL、Linux、Power BI、パフォーマンスチューニング、AWS / Amazon RDS、Git、およびこれまでに1,000万人以上の読者が閲覧した関連テクノロジーに関する何百もの信頼できる記事の著者です。
彼は、SQL Server Always On可用性グループに関する50部構成のシリーズで、単一のトピックに関する記事の最大の無料オンラインコレクションの1つを作成しています。 SQL Serverコミュニティへの貢献に基づいて、彼はSQLShackで2020年と2021年に継続的に名誉ある「今年のベストオーサー」を含むさまざまな賞を受賞しています。
Rajは常に新しい課題に関心を持っているため、コンサルティングが必要な場合は彼の著作で取り上げられている主題についてのヘルプは、rajendra.gupta16 @ gmail.comに連絡できます。
RajendraGuptaによるすべての投稿を表示

Rajendra Guptaによる最新の投稿(すべて表示)
  • SQLServerのAlwaysOn可用性でのセッションタイムアウトグループ-2021年2月8日
  • AWS RDS SQLServerのマイナーバージョンとメジャーバージョンのアップグレードの実行-2021年1月29日
  • AWS RDSPostgreSQLインスタンスのデプロイ-2021年1月27日

Write a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です