• ベストアンサー

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

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

noname#47454
noname#47454

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

  • ベストアンサー
  • 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

  • inner join left joinについて

    inner join left joinの動きについては 理解しているつもりなのですが どういったテーブルの時innerにして どんなテーブルの時left joinにするかが わかりません inner join left join の選択方法 ※どっちを使えばよいかの見極め方について 教えて下さい

  • INNER JOINの有用性

    INNER JOINの有用性 内部結合時に「INNER JOIN」と記述する有用性を教えてください。 内部結合を行なう際は、一般的には FROM句にテーブル名を列挙し WHERE句にテーブル間結合条件を列挙する という形式をとります。少なくとも私は。 これをあえて「INNER JOIN」を使用して記述する有用性が分かりません。 私がぱっと思いつくレベルであれば、 「WHERE句に記述される条件の種類には、抽出条件とテーブル間結合条件の 2種類の条件が混在している。混乱を避ける為これを分離する」 と、屁理屈をこねることも可能ですが、 FROM句にテーブルと「INNER JOIN」記述を混在させるほうが よっぽど分かりにくいように感じます。 あとさらに強いて言えば、「LEFT JOIN」にしたり「INNER JOIN」にしたりを 頻繁に切り替える場合とか。そんなこともまずないと思いますが…。 なので、「INNER JOIN」を使用する有用性をまったく感じません。 あえて使用する意味はあるのでしょうか? 質問は ・内部結合時に「INNER JOIN」を使用する有用性があるのか? ・有用性があるのであればどのような場合か? です。よろしくお願いします。

  • inner joinについて

    SQLのデータ抽出方法についてお教え下さい。 TABLE_2をdistinctで重複を無くして、TABLE_1とinner joinさせたいです。 select distinct TABLE_2.id と select TABLE_1.ID from TABLE_1 inner join distinct TABLE_2.ID といったようなことをやりたいです。 TABLE_1 ID 001 001 002 002 002 TABLE_2 ID 001 001 002 002 002 環境はMYSQL5.5になります。よろしくお願いいたします。

  • WHERE句で結合。INNER JOINとの違い

    MySQLで複数テーブルからデータ取得する際、 FROMの後に、テーブル名を2つ書いて、「WHERE」で繋げる書き方と、 「JOIN ★★ ON」で繋げる書き方では、何が違うのでしょうか? ・「INNER JOIN」と同じ意味でしょうか? ・書き方によっては、「LEFT OUTER JOIN」みたいにも書けるのでしょうか? ・普通は、どちらの書き方で書くとか、そういうお作法的な暗黙の了解はあるでしょうか? ・例えば「WHERE」だと3つ以上繋げられない(?)から、奨励されていない、とか…

    • ベストアンサー
    • MySQL
  • ちょっと見かけないinner joinについて

    どなたか以下の構文について教えて下さい。 どこのDBMSで使用されるものなのでしょう? SELECT B.項目1, B.項目2, A.項目2, A.項目3 FROM ( ( SELECT * FROM Bテーブル WHERE 項目3>"1" ) B INNER JOIN ( SELECT * FROM Aテーブル WHERE 項目2=10 ) A ON B.項目1=A.項目1; 意味はわかるのですが、普通のinner joinとは違うもので。

  • Left Joinについて

    Left Joinについて select * From shohin left join meisho on sh03 = me02 and me01 = 1 where **** select * From shohin left join meisho on sh03 = me02 where me01 = 1 left joinの中に me01 = 1があるパターンとwhere句に me01 = 1 があるパターンで検索結果が変わってくる具体的にどう変わるのでしょうか 良く理解ができていないので教えてください

  • INNER JOINについて

    こんにちは、現在下のWEBでSQLの勉強をしているのですが・・・。 http://www.pursue.ne.jp/jouhousyo/SQLDoc/select21.html INNER JOINについて質問です。 FROM 表名1 INNER JOIN表名2 ON 表名1.フィールド名 = 表名2.フィールド名 このONというコマンド、これは連結するフィールド名を表しているのですよね?これは、無くてはならないコマンドでしょうか。例えば、このウェブの問題だと、売上表.顧客CD=顧客表.顧客CD をする事で、顧客CDがソートされ、同じものが連結されてます。 もし、顧客CDの値が、二つの表で異なった場合、異なった値は切り捨てられ、その行は融合されないと言う事ですよね? なら、例えば普通に二つの表の値を比べたい場合、例えば、 A表: 売り上げ総合、日付、顧客表 B表: 顧客名、売り上げA、売り上げB という表があったとして、表Bの売り上げレートを表Aの総売上で割り、書く平均値を出したい場合、 SELECT  表B.売り上げA / 表A.売り上げ総合, 表B.売り上げB / 表A.売り上げ総合 FROM 表A INNER JOIN 表B として、ONを使わなくても大丈夫でしょうか?

    • ベストアンサー
    • MySQL
  • 異なるデータベース間でinner joinしたい

    現在VB.NET 2008を用いて、システムを作成しています。 Access2008の.accdb内のデータと、MySQL内のデータをinner joinして取得したいと考えていますが、 可能でしょうか? 可能であればどのようにすればよいでしょうか?

    • ベストアンサー
    • MySQL
  • どちらのLEFT JOINが早いでしょうか?

    下記2つのテーブルがあったとします。 ・大テーブルA 7000万件 ・小テーブルB 2000件(※現在はWHERE句で指定すると1件) をJOINする場合、下記のどちらの方法が望ましいでしょうか? 案1)子テーブルを親とする方法 テーブルA(ON句により1件~2000件) LEFT JOIN 7000万件のテーブルB 案2)親テーブルを子とする方法 7000万件のテーブルB LEFT JOIN テーブルA(ON句により1件~2000件) 又、LEFT JOINの、ON句で条件を絞るのと、 WHERE句で条件を絞るのではどちらが好ましいでしょうか?

    • ベストアンサー
    • MySQL
  • left outer joinで抽出したい

    SELECT (TABLE1 INNER JOIN TABLE2 ON TABLE1.CODE = TABLE2.CODE) INNER JOIN TABLE3 ON TABLE1.JAN = TABLE3.JAN というSQL文があります。この文を変更して下記の条件での抽出をおこないたいと思います。 ■TABLE1.JANを元にする。 ■TABLE1.JAN = TABLE3.JANは抽出に含めない ■TABLE1.JANに存在していて、TABLE3.JANに存在しないJANをTABLE1.JANから抽出 このようなSQL文をかきたいのですが、どのようなSQL文にしたらよいでしょうか? left outer joinを使えばいいとは思うのですが、そこから先が思い浮かびません。 よろしくお願いします。

    • ベストアンサー
    • MySQL