SQL Server Essentials: SQL Self Joinsの使用

A self join in SQL Server is a useful statement to use for demonstrating relationships within a single SQL Server table database. In this tutorial, I’ll show you when and how to use an SQL self join. To do that, I’ll be detailing an sql self join example where I’ll list the supervisors for all employees in the Northwind Employees sample table. 

SQLのセルフ結合は何のためですか?

セルフ結合は、特別でかなり一般的でないタイプのSQL結合です。ほとんどの結合は、INNER JOINのように、共通の列によって2つ以上の異なるテーブルをリンクしますが、セルフ結合はテーブルを自分自身にリンクします。通常の結合操作とは異なり、同じテーブルが結合操作の左側と右側の両方に使用されます。

広告

たとえば、同じマネージャーを持つすべての従業員を見つけるためにセルフ結合を使用することができます。ここでは、マネージャーのIDを従業員のIDと照合するかもしれません。また、同じ製品の注文を持つすべての顧客を見つけるためにセルフ結合を使用することもできます。

SQLセルフ結合の例

次のクエリは、Northwindサンプルデータベースを使用したセルフ結合のSQLコードの例を示しています。テーブル名は「Employees」であり、おそらく従業員データが含まれています。

USE Northwind
SELECT e1.EmployeeID, e1.FirstName, e1.LastName, e1.ReportsTo,
    e2.FirstName as ManagerFirstName, e2.LastName as ManagerLastName
FROM Employees e1 LEFT OUTER JOIN Employees e2 on e1.ReportsTo = e2.EmployeeID

このSQLセルフ結合の例では、各従業員の上司の名前を表示します。

  • ここでは、’ReportsTo’列と’EmployeeID’列を使用して、Employeesテーブルを自己結合しています。上司も従業員なので、同じEmployeesテーブルにリストされています。
  • この場合、’ReportsTo’列の値は’EmployeeID’列の値と一致する必要があります。
  • 結果セットでは、自己結合テーブルの’FirstName’と’LastName’列が’ManagerFirstName’と ‘ManagerLastName’に名前が変更されます。
  • EmployeeIDテーブルは’t1’のテーブルエイリアスを使用し、自己結合テーブルは’t2’のテーブルエイリアスを使用します。
  • 実際のSQL自己結合構文はLEFT OUTER JOINです。ON句は、自己結合で使用される列を指定します。

自己結合クエリの結果を次の画像で確認できます:

広告

SQL self join example (Image credit: Petri/Michael Otey)

このクエリは、EmployeeID、FirstName、LastName、ReportsTo(EmployeeID)、ManagerFirstName、およびManagerLastNameの詳細を含む結果セットを返します。結果セットを調べると、Andrew FullerがEmployeeID 2を持ち、EmployeeID 1、3、4、5、および8の上司であることがわかります。Andrew Fullerは他の誰にも報告していないため、ReportToおよびManagerFirstNameとManagerLastNameはすべてNULLです。

いつSQL自己結合を使用するべきですか?

SQLテーブルが自身のデータを参照する場合は、自己結合を使用するべきです。この記事で説明したように、SQLの自己結合の素晴らしいユースケースは、 従業員データを含むテーブルで、各行には従業員とそのマネージャーに関する情報が含まれる場合です。この場合、自己結合を使用すると、組織の動作に関する関連情報を簡単に抽出できます。

Source:
https://petri.com/sql-self-join/