• ベストアンサー

Inner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.4

出てくる結果が違います。 テーブル1のフィールド1に、 1 2 3 4 5 6 が、 テーブル2のフィールド1に、 1 2 3 7 8 9 が入力されている場合、 SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1] FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1]; では、結果は、 テーブル1.フィールド1 テーブル2.フィールド1 1               1 2               2 3               3 4               NULL 5               NULL 6               NULL の6レコードが出力されますが、 SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1] FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1]; では、結果は、 テーブル1.フィールド1 テーブル2.フィールド1 1               1 2               2 3               3 の3レコードしか出力されません。

noname#47454
質問者

お礼

ありがとうございます。 説明、シンプルでとてもわかりやすかったです。 使わせてくださいね☆

その他の回答 (3)

  • jxt
  • ベストアンサー率48% (42/86)
回答No.3

対応させるべきはinner joinとouter joinなんですけど、 left join は left outer join と同等です。 innter joinは結合する相手のテーブルに対応するデータが ある場合のみ結果を返しますが、outer joinは相手の テーブルに対応するデータが無い場合、そのカラムを NULLとして返します。 あるouter joinのクエリの結果が (等幅で見れればいいんだけど) field1 |field2 | --------+--------+ Apple  |Red   | Melon  |NULL  | Grape  |Purple | --------+--------+ だとしたら、inner joinは field1 |field2 | --------+--------+ Apple  |Red   | Grape  |Purple | --------+--------+ のように返します。outer joinは他にright outer joinと full outer joinがあります。

noname#47454
質問者

お礼

outer join・・・? ちょっと調べてみます。ありがとうございました。

  • mfuku
  • ベストアンサー率50% (173/345)
回答No.2

#1の者です。 先ほどの投稿、以下2点修正します。 >「INNER JOIN」は結合する両方のテーブルにデータがある場合にのみ毛と号の結果データが取得できる、という意味。 →「INNER JOIN」は結合する両方のテーブルにデータがある場合にのみ結合結果データが取得できる、という意味。 >売上伝票番号:00000000001が取得できないのは商品コード:000000003が商品マスタにないからです。 →売上伝票番号:00000000002が取得できないのは商品コード:000000003が商品マスタにないからです。

noname#47454
質問者

お礼

ありがとうございました!! スッキリ納得できました。

  • mfuku
  • ベストアンサー率50% (173/345)
回答No.1

簡単に言いますと、 「INNER JOIN」は結合する両方のテーブルにデータがある場合にのみ毛と号の結果データが取得できる、という意味。 一方、「LEFT JOIN」は片方にデータがなくても結合結果データが取得できる、という意味です。 例えば、 売上テーブルと商品マスタがあったとします。 データは以下のように入ってます。 売上テーブル 売上伝票番号 商品コード 00000000001 000000001 00000000002 000000003 商品マスタ 商品コード 商品名 000000001 テレビ 000000002 パソコン このとき、 SELECT 売上伝票番号, 商品名 FROM 売上テーブル INNER JOIN 商品マスタ ON 売上テーブル.商品コード = 商品マスタ.商品コード のSQLでは 売上伝票番号 商品名 00000000001 テレビ が返ってきます。 売上伝票番号:00000000001が取得できないのは商品コード:000000003が商品マスタにないからです。 次に、 SELECT 売上伝票番号, 商品名 FROM 売上テーブル LEFT JOIN 商品マスタ ON 売上テーブル.商品コード = 商品マスタ.商品コード のSQLでは 売上伝票番号 商品名 00000000001 テレビ 00000000002 [NULL] が返ってきます。 商品コード:000000003は商品マスタにありませんが、商品名はNULLで売上テーブルのデータは取得されます。

関連するQ&A