SQL JOIN

SQLジョインは、2つ以上のテーブルのカラム間の関係に基づいて、これらのテーブルからデータをクエリするために使用されます。

ジョインとキー

完全な結果を得るために、時には2つ以上のテーブルから結果を取得する必要があります。その場合、ジョインを実行する必要があります。

データベースのテーブルはキーを使ってお互いに関連付けられます。主キー(Primary Key)は、そのカラムの各行の値がユニークである列です。テーブルでは、各主キーの値がユニークです。これにより、各テーブルのすべてのデータを繰り返さずにテーブル間のデータを結びつけることができます。

次に「Persons」テーブルを見てください:

Id_P LastName FirstName 住所
1 Adams John オックスフォード・ストリート ロンドン
2 ブッシュ ジョージ ファイブ・アベニュー ニューヨーク
3 Carter Thomas 长安街 北京

ご注意ください、「Id_P」カラムはPersonsテーブルの主キーです。これは、2行が同じId_Pを持つことがないことを意味しており、名前が完全に同じであっても、Id_Pで2人を区別できます。

次に「Orders」テーブルを見てください:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

ご注意ください、「Id_O」カラムはOrdersテーブルの主キーであり、同時に「Orders」テーブルの「Id_P」カラムは「Persons」テーブルの人を参照するために使用され、名前が正確でなくても使用できます。

「Id_P」カラムが上記の2つのテーブルを関連づけていますので、ご注意ください。

2つのテーブルを参照する

2つのテーブルからデータを取得するために、2つのテーブルを参照することができます:

誰が何を注文したか、そして彼らがどの製品を注文したか?

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

結果セット:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

SQL JOIN - JOIN の使用

上記の方法に加えて、JOIN キーワードを使用して2つのテーブルからデータを取得することもできます。

すべての人の注文をリストアップしたい場合、以下の SELECT 文を使用できます:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

結果セット:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

異なる SQL JOIN

上記の例で使用した INNER JOIN(内結合)以外にも、他の種類の結合を使用できます。

以下に、使用できる JOIN タイプとそれらの違いを示します。

  • JOIN: テーブルに少なくとも1つの一致する行がある場合にのみ行を返します
  • LEFT JOIN: 右側のテーブルに一致する行がなくても、左側のテーブルからすべての行を返します
  • RIGHT JOIN: 左側のテーブルに一致する行がなくても、右側のテーブルからすべての行を返します
  • FULL JOIN: いずれかのテーブルに一致する行が存在する場合にのみ行を返します