web-dev-qa-db-ja.com

JOINとINNER JOINの違い

これら両方の結合は私に同じ結果を与えるでしょう:

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK

vs

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK

パフォーマンスまたは他の点でステートメント間に違いはありますか?

異なるSQL実装間で違いますか?

878
driis

これらは機能的には同等ですが、特にクエリに他の結合タイプ(つまりLEFTまたはRIGHTまたはCROSS)が含まれている場合は、INNER JOINの方が読みやすくなります。

956
palehorse

いいえ、違いはありません。純粋な 構文糖 です。

217
Quassnoi

内部結合=結合

INNER JOINは指定しない場合のデフォルト _ Word JOINを使用するときの型です。

LEFT OUTER JOINまたはRIGHT OUTER JOINを使用することもできます。この場合、Word OUTERはオプションですが、CROSS JOINを指定することもできます。

OR

内部結合の場合、構文は次のとおりです。

SELECT ...
表Aより
[INNER] JOIN TableB

(言い換えれば、 "INNER"キーワードはオプションです - 結果はそれがあってもなくても同じです)

119
net_prog

OUTER JOINsと同様に、単語"OUTER"はオプションです。 LEFT"OUTER" JOINにするのはRIGHTまたはJOINキーワードです。

しかし、何らかの理由で私は"OUTER"のように常にLEFT OUTER JOINを使い、決してLEFT JOINを使いません、しかし私は決してINNER JOINを使いません、むしろ"JOIN"を使います:

SELECT ColA, ColB, ...
FROM MyTable AS T1
     JOIN MyOtherTable AS T2
         ON T2.ID = T1.ID
     LEFT OUTER JOIN MyOptionalTable AS T3
         ON T3.ID = T1.ID
46
Kristen

異なるSQL実装間で違いますか?

はい、 Microsoft Accessjoinだけを許可しません。 inner join が必要です。

44
Michał Powaga

他の答えはすでに述べているように、あなたの例には違いはありません。

関連する文法は ここに文書化されている

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

それを示すことはすべてオプションです。このページはさらに明確にしています

INNER一致するすべての行のペアが返されることを指定します。両方のテーブルから一致しない行を破棄します。 結合タイプが指定されていない場合、これがデフォルトの になります。

文法はまた、INNERisが必要な場合が1回あることを示しています。結合ヒントを指定するとき.

以下の例をご覧ください

CREATE TABLE T1(X INT);
CREATE TABLE T2(Y INT);

SELECT *
FROM   T1
       LOOP JOIN T2
         ON X = Y;

SELECT *
FROM   T1
       INNER LOOP JOIN T2
         ON X = Y;

enter image description here

24
Martin Smith