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

アンサープラス

SQL文で結合をする場合に「JOIN」を使用すると、違うデータを複数のテーブルから取り出すことができますね。



・SQL実践講座(4):異なるテーブル同士を結合する「JOIN」句 - @IT
http://www.atmarkit.co.jp/ait/articles/0101/27/n …

A 回答 (4件)

出てくる結果が違います。



テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

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レコードしか出力されません。
    • good
    • 22
この回答へのお礼

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

お礼日時:2004/01/09 16:24

対応させるべきは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があります。
    • good
    • 4
この回答へのお礼

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

お礼日時:2004/01/09 16:26

#1の者です。


先ほどの投稿、以下2点修正します。

>「INNER JOIN」は結合する両方のテーブルにデータがある場合にのみ毛と号の結果データが取得できる、という意味。

→「INNER JOIN」は結合する両方のテーブルにデータがある場合にのみ結合結果データが取得できる、という意味。

>売上伝票番号:00000000001が取得できないのは商品コード:000000003が商品マスタにないからです。

→売上伝票番号:00000000002が取得できないのは商品コード:000000003が商品マスタにないからです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/01/09 16:24

簡単に言いますと、


「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で売上テーブルのデータは取得されます。
    • good
    • 3

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

QOrganic Matter (有機物)

Organic Matterがパーセンテージで表されている場合どういう意味があるのでしょうか?どういう計算ででてきたのですか?

Organic Matterから窒素や炭素量が求められそうなのですが、計算方法がわかりません。

なにか他にもOrganicMatterに関することがあればよろしくお願いします。

Aベストアンサー

えっと、土壌中の有機物含量がわかったとしてもその有機物の炭素含量・窒素含量がわかっていないと土壌中の炭素量・窒素量は計算できないと思うのですが。たとえば100gの土壌に2gの有機物が含まれていたとしても、その有機物のうち何%が炭素で何%が窒素なのかわからないと計算できませんよね。

一般的に土壌中の全炭素・全窒素を求めようと思ったら現在はCNコーダーと呼ばれる微量元素分析器を用いて分析するのが主流だと思います。これを使うと土壌100gあたり炭素が何g、窒素が何g、というのが直接(有機物含有量を計算しなくても)わかります。

QLeft Join/Right Join の意味

Left Join/Right Join を、accessクエリのデザイン画面では使っています。

SQLではLeft Join/Right Join となりますが、この「右」「左」という言葉を使う意味を教えていただけないでしょうか。

#なぜ「右」「左」というのかよくわからないため。
#まことに初歩的な質問だと思いますが。

Aベストアンサー

本来この構文を考え出した人の意図と合っているのかは知りませんが、私なりの解釈は、どちらのテーブルを元にして結合しているかだと思っています。
すなわち、A Join BのA(左)を元にするかB(右)を元にするかです。

例えば、

テーブル1 Left Join テーブル2 On 結合条件
なら、テーブル1(左)を元にしてテーブル2を結合条件に従って結合

テーブル1 Right Join テーブル2 On 結合条件
なら、テーブル2(右)を元にしてテーブル1を結合条件に従って結合

だから、

テーブル1 Left Join テーブル2 On 結合条件
テーブル2 Right Join テーブル1 On 結合条件
は、結合条件が同じなら元にしているテーブルは同じなので同じ結果を返す。

s-holmesさんがこの考え方で納得していただけるかは分かりませんが、以前私も悩んだことがあったので参考意見ぐらいにしていただけるとうれしいです。

Q「 I will get to go a juice.」と「I wil

「 I will get to go a juice.」と「I will go to get a juice.」の違いを教えてください。

get to go と go to get どちらも使えますか?

Aベストアンサー

ShowMeHowさんの意見に賛成で、記載されたような単語の組み合わせては耳にしないと思います。しかし

I will get to go to a cup of juice. いっぱいのジュースを取りに行けるようになる。たとえば病院で歩けるようになったら、ベッドを下りて取りに行けるとか、台風が去ったので避難した場所から家に帰れるようになる、I will get to go homeなど言えると思います。I get to know.知るようになるなどと言います。

2番目の文章は問題ないと思います。I will go and get...と同じ意味で使えると思います。andが落ちているのもよく見かけます。I will go get....これも同じ意味と思いますが、会話で用いられると思いますし、砕けた表現になるようです。

QINNER JOINとwhere句

等結合のSQLを書く必要が出てきた場合、

INNER JOINとwhere句 どちらを使用されてるか教えて頂けないでしょうか?

私は、結合表の数が多くなってくると
INNNERのSQLはぱっと見て見にくいと想いWHEREを使っているのですが。
(何より、WHEREのほうが構文が簡単で・・・。)

よろしくお願いします。

Aベストアンサー

「Inner Join」と「Where」で、得られる結果が同じ場合であれば、
私は「Inner Join」を選択します。

Accessに触れ始めた頃から長らく、SQL文には触れずにデザイン
ビューのみで対応してきたという経緯もありますが
(→デザインビューなら結合線を追加するだけなので簡便)、
現在での最大の理由は、結果表示に要する時間が、Inner Join
の方が圧倒的に早かったため、です。
(レコードの多寡、インデックスの有無など、すべてのパターンを
 検証したわけではありませんが(汗))

Q前置詞ofでこんがらがってきました。 例えば apple juice mushroom soup 上

前置詞ofでこんがらがってきました。
例えば
apple juice
mushroom soup
上記が普通だと思いますが…

juice of apple
soup of mushroom
のような使い方もアリですか?

また、ニュアンスの違いなどあれば教えてください。

Aベストアンサー

例えばジュースが欲しい、と言ったとします。漠然と。そして何のジュース?、と問われる。その心は?
of apple。スープも同様。of mashroomで解決します。

多少特殊ですが、「あり」です。

QINNER JOINの有用性

INNER JOINの有用性

内部結合時に「INNER JOIN」と記述する有用性を教えてください。

内部結合を行なう際は、一般的には
FROM句にテーブル名を列挙し
WHERE句にテーブル間結合条件を列挙する
という形式をとります。少なくとも私は。

これをあえて「INNER JOIN」を使用して記述する有用性が分かりません。

私がぱっと思いつくレベルであれば、
「WHERE句に記述される条件の種類には、抽出条件とテーブル間結合条件の
2種類の条件が混在している。混乱を避ける為これを分離する」
と、屁理屈をこねることも可能ですが、
FROM句にテーブルと「INNER JOIN」記述を混在させるほうが
よっぽど分かりにくいように感じます。

あとさらに強いて言えば、「LEFT JOIN」にしたり「INNER JOIN」にしたりを
頻繁に切り替える場合とか。そんなこともまずないと思いますが…。


なので、「INNER JOIN」を使用する有用性をまったく感じません。
あえて使用する意味はあるのでしょうか?

質問は
・内部結合時に「INNER JOIN」を使用する有用性があるのか?
・有用性があるのであればどのような場合か?
です。よろしくお願いします。

INNER JOINの有用性

内部結合時に「INNER JOIN」と記述する有用性を教えてください。

内部結合を行なう際は、一般的には
FROM句にテーブル名を列挙し
WHERE句にテーブル間結合条件を列挙する
という形式をとります。少なくとも私は。

これをあえて「INNER JOIN」を使用して記述する有用性が分かりません。

私がぱっと思いつくレベルであれば、
「WHERE句に記述される条件の種類には、抽出条件とテーブル間結合条件の
2種類の条件が混在している。混乱を避ける為これを分離する」
と、屁理屈をこ...続きを読む

Aベストアンサー

本質的な差異はありません。

パフォーマンスに差が出るという事も
常識的にはありえないと思います。
今のオプティマイザはそんなに質は悪くありません。

20年以上前のDBもしくは無名で信用性の無いDBをあえて
使うという状況でもない限り気にしなくていいと思います。

QNational Trust Georgian Organic Split Pea Greenは商品名かなにかですか?

お世話になります。

以下の文章
"You can use a National Trust Georgian Organic Split Pea Green in your 18 century parlor or your 1950s semi downstairs toilet."
に出てくる 
”National Trust Georgian Organic Split Pea Green”なのですが、これは商品名かなにかなのでしょうか。

その場合、カタカナで「ナショナル・トラスト・ジョージアン・オーガニック・スプリット・ピー・グリーン」と訳せばいいのでしょうか。

ご教示いただければ助かります。
よろしくお願いいたします。

Aベストアンサー

こちらにも同じ文があるのですが
http://www.thisisbristol.co.uk/wdp/lifestyle/king-colour/article-975224-detail/article.html
ここでは a National Trust Georgian organic split-pea green と、後半部は小文字になってますね。
ですので商品名とかではなく、ナショナルトラストのジョージ王朝風(建物でよく使われている)、有機栽培の乾燥エンドウ豆の緑色、ということではないでしょうか。
split pea green は色の名前として使われているようですが(検索するとたくさん出てきます)、日本語にしたときに「乾燥エンドウ豆の緑色」ではさまになりませんけどね。

Qinner joinでサブクエリ

SQLについてお教え頂けませんでしょうか?

在庫テーブル
・ID
・数量

データ
001,1
001,3
002,3
002,2
002,4
003,2

商品テーブル
・ID

データ
001
002
003
004

やりたいこと:
在庫テーブルには重複しているIDがあります。
商品テーブルには重複しているIDはありません。

在庫テーブルの重複を削除したIDと商品テーブルのIDをinner joinで結びたいと思います。

・select distinct ID FROM 在庫テーブル
・select ID FROM 商品テーブル

この2つのjoin方法がわかりません。

結果として、
001
002
003
を取得したいいです。宜しくお願いします。

ちなみに
select ID from 商品テーブル inner join 在庫テーブル 商品テーブル.ID = exists(select distinct ID from 在庫テーブル)
というコードを書きましたが、動きませんでした・・・抽出データが0件でした・・・

Aベストアンサー

 質問の例題が、あまりにも省略されている為に、正確な要件が解らなくなってしまっています。
 おそらく、商品テーブルにも在庫テーブルにも、そのほかのフィールドがあるはずですよね。そうで無いと、在庫テーブルはレコードの特定が出来ませんし、商品テーブルに至っては存在価値を疑ってしまいますので・・・

 で、質問の結合方法も、そのほかのフィールドがらみで方法が変わってきそうです。
 本当に、質問内容だけでしたら、一番単純な解は、
select distinct ID from 在庫テーブル
 です。結合の必要なんてありません。

 こんなのも、いちおうあり・・・ですが・・・
 select distinct z.ID from 商品テーブル s join 在庫テーブル z on s.ID=z.ID
 これで、少なくとも、商品テーブルに存在する商品IDのうち、在庫テーブルに存在する商品の重複の無いIDが取得できます。が・・・普通、商品テーブルに存在しない商品IDてのが想像しがたいので、意味があるかどうか・・・

 普通は、この類のテーマだと、
select s.ID, sum(z.数量) from 商品テーブル s join 在庫テーブル z on s.ID=z.ID
group by s.ID
 等とやって、「商品の在庫量が知りたいです」となるんですけど・・・

 さて、いったい何がやりたいのでしょうか?
 「いろいろとやりたいこと」の内容を書かれた方が、的確な答えが返ってくると思います。

 質問の例題が、あまりにも省略されている為に、正確な要件が解らなくなってしまっています。
 おそらく、商品テーブルにも在庫テーブルにも、そのほかのフィールドがあるはずですよね。そうで無いと、在庫テーブルはレコードの特定が出来ませんし、商品テーブルに至っては存在価値を疑ってしまいますので・・・

 で、質問の結合方法も、そのほかのフィールドがらみで方法が変わってきそうです。
 本当に、質問内容だけでしたら、一番単純な解は、
select distinct ID from 在庫テーブル
 です。結合の必要...続きを読む

Qinner join left joinについて

inner join left joinの動きについては
理解しているつもりなのですが
どういったテーブルの時innerにして
どんなテーブルの時left joinにするかが
わかりません

inner join left join の選択方法
※どっちを使えばよいかの見極め方について
教えて下さい

Aベストアンサー

inner join は左右ともに存在するレコードを取り出す。
なので両方のテーブルに存在するレコードを取り出したいときに使う
left join は左側にあるテーブルを全部取り出し、右側は、対応するレコードがあったら取り出すみたいな感じ。要するに、左側にないレコードを把握するときとかに使う。

まずはinner joinでやってみて
あー左側のテーブルは全部出したいなーなんて時に
left joinに変える意識でいいんでない?

QLEFT JOIN あいまいな外部結合

Access2000でクエリを作成します。
SQLで
SELECT お支払.ID_支払, お支払.N_伝票No, お支払.N_支払金額, お支払.N_支払区分コード
FROM 伝票 LEFT JOIN (支払区分マスター INNER JOIN お支払 ON 支払区分マスター.N_支払区分コード = お支払.N_支払区分コード) ON 伝票.N_伝票No = お支払.N_伝票No;

とすると あいまいな外部結合が含まれている・・というエラーがでてしまいます。どうしたらいいでしょうか。

伝票は全て表示して、その中のお支払には、区分コードを割り当てたいだけなのですが。
宜しくお願い致します。

Aベストアンサー

LeftJoinの結合先にInnerJoinがあると、そのエラーが生じますので、
そのInnerJoinをLeftJoinに変えます。
(クエリをデザインビューで表示させた場合でいうと、「○→□-△」でエラー。
 「○-□→△」や「○→□→△」(=下の修正版)なら、エラーになりません)

SELECT お支払.ID, お支払.N_伝票No, お支払.N_支払金額, お支払.N_支払区分コード
FROM 伝票 LEFT JOIN (お支払 LEFT JOIN 支払区分マスター ON お支払.N_支払区分コード = 支払区分マスター.N_支払区分コード) ON 伝票.N_伝票No = お支払.N_伝票No;


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング