SQL JOIN
- 前のページ SQL エイリアス
- 次のページ SQL INNER 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: いずれかのテーブルに一致する行が存在する場合にのみ行を返します
- 前のページ SQL エイリアス
- 次のページ SQL INNER JOIN