- ベストアンサー
Inner join と Left joinの明確な違いは?
Inner join と Left joinの違いがよくわかりません。 教えてください。
- みんなの回答 (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レコードしか出力されません。
その他の回答 (3)
- jxt
- ベストアンサー率48% (42/86)
対応させるべきは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があります。
お礼
outer join・・・? ちょっと調べてみます。ありがとうございました。
- mfuku
- ベストアンサー率50% (173/345)
#1の者です。 先ほどの投稿、以下2点修正します。 >「INNER JOIN」は結合する両方のテーブルにデータがある場合にのみ毛と号の結果データが取得できる、という意味。 →「INNER JOIN」は結合する両方のテーブルにデータがある場合にのみ結合結果データが取得できる、という意味。 >売上伝票番号:00000000001が取得できないのは商品コード:000000003が商品マスタにないからです。 →売上伝票番号:00000000002が取得できないのは商品コード:000000003が商品マスタにないからです。
お礼
ありがとうございました!! スッキリ納得できました。
- mfuku
- ベストアンサー率50% (173/345)
簡単に言いますと、 「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で売上テーブルのデータは取得されます。
お礼
ありがとうございます。 説明、シンプルでとてもわかりやすかったです。 使わせてくださいね☆