概要:このチュートリアルでは、SQL INNERJOINステートメントを使用して複数のテーブルからデータをクエリする方法を学習します。
前のチュートリアルでは、SELECTステートメントを使用して単一のテーブルからデータをクエリする方法を学習しました。ただし、分析用の完全な結果セットを取得するために、複数のテーブルからデータをクエリすることがよくあります。複数のテーブルからデータをクエリするには、結合ステートメントを使用します。
SQLには、内部結合、外部結合(左外部結合または左結合、右外部結合または右結合、完全外部結合など)などのいくつかのタイプの結合が用意されています。 )および自己結合。このチュートリアルでは、INNER JOIN句の使用方法を示します。
SQL INNERJOIN構文
以下に
2つのテーブルを結合するための構文:
|
1
2
3
4
5
|
SELECT
column1、column2
FROM
table_1
INNER JOIN table_2 ON join_condition;
|
上記の構文をさらに詳しく調べてみましょう。
-
table_1とtable_2は結合テーブルと呼ばれます。 - 各行について
table_1で、クエリは結合条件を満たすtable_2の対応する行を見つけます。対応する行が見つかった場合、クエリは両方のテーブルのデータを含む行を返します。それ以外の場合は、table_1の次の行を調べ、このプロセスはtable_1のすべての行が調べられるまで続きます。
3つ以上のテーブルを結合する場合、同じロジックが適用されます。
SQL INNERJOINの例
SQL INNER JOIN –2つのテーブルからのデータのクエリの例
この例では、サンプルデータベースのproductsテーブルとcategoriesテーブルを使用します。次の図は、データベース図を示しています。
上の図:
- 1つのカテゴリに多くの製品を含めることができます。
- 1つの製品は1つのカテゴリにのみ属します。
したがって、テーブルとproductsテーブルの行。 2つのテーブル間のリンクはcategoryid列です。
両方のテーブルから次のデータをクエリする必要があります。
-
productsテーブルのproductID、productName。 - iv
categoriesテーブルのid = “b32d50b7b9″>
。
次のクエリは、両方のテーブルからデータを取得します。
|
1
2
3
4
5
6
|
SELECT
productID、productName、categoryName
FROM
製品
内部結合
カテゴリONcategories.categoryID = products.categoryID;
|
結合条件は、INNER JOIN句のONキーワードの後の式として指定されます:
|
1
|
categorys.categoryID = products.categoryID
|
productsテーブルの場合、クエリはcategoriesテーブルで同じ categoryid. の対応する行を見つけます。両方のテーブルで、SELECT句で指定された列(製品ID、製品名、カテゴリ名)を含む行を返します。それ以外の場合は、productsテーブルの次の行をチェックして、categoriesテーブルで一致する行を見つけます。このプロセスは、productsテーブルの最後の行が検査されるまで続きます。
SQL INNER JOIN –3つのテーブルからのデータのクエリ
3つのテーブルを結合するために同じ手法を使用できます。次のクエリでは、productID、productName、categoryName、 products、categories、およびsuppliersテーブルから:
|
1
2
3
4
5
6
7
8
9
10
11
|
SELECT
productID、
productName、
categoryName、
companyNameASサプライヤー
FROM
製品
内部結合
カテゴリONカテゴリ。 categoryID = products.categoryID
内部結合
サプライヤーONsuppliers.supplierID = products.supplierID
|
暗黙のSQL内部結合
次のように、暗黙の内部結合と呼ばれるINNER JOINの別の形式があります。
|
1
2
3
4
5
6
7
|
SELECT
column1、column2
FROM
table_1、
table_2
WHERE
join_condition;
|
このフォームでは、すべての結合テーブルをFROM句を使用し、SELECTステートメントのWHERE句に結合条件を設定します。上記のクエリ例は、暗黙のINNER JOINを使用して次のように書き直すことができます。
|
1
2
3
4
5
6
7
|
SELECT
productID、productName、categoryName
FROM
製品、
カテゴリ
場所
products.categoryID = category.categoryID;
|