表の結合②(等結合)



表の結合②(等結合)

表の結合の2回目は、等結合の説明となります。

1.等結合の原理

受注表と商品表には、”商品コード”という列が共通に存在しています。この列は、2つの表の間で列名が同じだけでなく、共通する値を持っています。このように2つの表の間に対応する列がある場合、SQLでは、その列の値が等しい行を両方の表から抜き出してつなぎ合わせることができます。
等結合の構文は、”INNER JOIN”と”ON”というキーワードを使って表現します。
では、例を見てみましょう。次のクエリーでは、商品コード列を結合条件として受注表と商品表を等結合しています。

SELECT J.受注日, J.得意先名, J.商品コード, S.商品コード, S.商品名 FROM 受注 J INNER JOIN 商品 S ON J.商品コード = S.商品コード;

結果は以下のとおりとなります。

商品コードは2つ表示されていますが、SELECTで指定したとおり、左側が受注表、右側が商品表となります。
商品コードは2つの表を結び付けるのに使用されている列ですが、SELECT句で指定する必要は必ずしもありません。

2.検索条件の指定

検索条件の指定においては、FROM句のINNER JOIN と ON句の述語で結合条件の指定を定義しているので、検索条件を指定する場合は、個別にWHERE句に記述します。以下のクエリーでは、商品コードが22のデータのみ抽出します。

SELECT J.受注日, J.得意先名, J.商品コード, S.商品コード, S.商品名
FROM 受注 J INNER JOIN 商品 S ON J.商品コード = S.商品コード
WHERE J.商品コード = 22;

結果は以下のとおりとなります。

3.3つ以上の表の結合

3つ以上の表を結合する場合には、1番目の表と2番目の表の結合、1番目の表と3番目の表の結合というように結合条件を1つづつ定義していきます。MySQLでのSQLは以下のとおりとなります。(Oracleなどでは、WHERE句の述語として指定する結合条件をAND演算子で組み合わせます)

SELECT J.受注日, T.得意先名 ,T.住所 ,(J.数量 * S.単価) 受注合計, S.商品名
FROM (受注 J INNER JOIN 商品 S ON J.商品コード = S.商品コード)
INNER JOIN 得意先 T ON J.得意先名 = T.得意先名;

結果は以下のようになります。

等結合の説明については以上となります。次回は外部結合について説明します。

 

コメントを残す

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