LEFT JOIN
とはどう違いLEFT OUTER JOIN
ますか?
12 に答える
ドキュメントによると:FROM(Transact-SQL):
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
キーワードOUTER
はオプションとしてマークされています(角括弧で囲まれています)。この特定のケースでは、指定するかどうかにOUTER
違いはありません。join句の他の要素もオプションとしてマークされていますが、それらを除外すると違いが生じることに注意してください。
たとえば、JOIN
句のtype-part全体はオプションです。この場合、デフォルトはINNER
、を指定した場合ですJOIN
。言い換えれば、これは合法です:
SELECT *
FROM A JOIN B ON A.X = B.Y
同等の構文のリストは次のとおりです。
A LEFT JOIN B A LEFT OUTER JOIN B
A RIGHT JOIN B A RIGHT OUTER JOIN B
A FULL JOIN B A FULL OUTER JOIN B
A INNER JOIN B A JOIN B
また、この他のSOの質問に残した答えも見てください。SQLの左結合とFROM行の複数のテーブル?。
あなたの質問に答えるために、LEFT JOIN と LEFT OUTER JOIN の間に違いはありません。
最上位には、主に 3 種類の結合があります。
- インナー
- アウター
- クロス
INNER JOIN - 両方のテーブルに存在する場合、データをフェッチします。
OUTER JOINには3 つのタイプがあります。
LEFT OUTER JOIN
- 左のテーブルに存在する場合、データをフェッチします。RIGHT OUTER JOIN
- 右側のテーブルに存在する場合、データを取得します。FULL OUTER JOIN
- 2 つのテーブルのいずれかに存在する場合、データを取得します。
CROSS JOINは、名前が示すように、
[n X m]
すべてをすべてに結合します。コンマを使用して結合するテーブルを (ステートメントの節で)
単純にリストするシナリオと同様です。FROM
SELECT
注意点:
- あなたが言及
JOIN
した場合、デフォルトではINNER JOIN
. OUTER
結合はLEFT
|でなければなりません。RIGHT
| |FULL
簡単に言うことはできませんOUTER JOIN
。OUTER
キーワードを削除してLEFT JOIN
、 またはRIGHT JOIN
またはと言うだけFULL JOIN
です。
これらをより良い方法で視覚化したい場合は、次のリンクにアクセスしてください: SQL 結合の視覚的な説明
左結合と左外側結合の違いは何ですか?
何もありません。LEFT JOIN
とLEFT OUTER JOIN
は同等です。
私は PostgreSQL DBA です。外部結合と外部結合以外の違いを理解できる限り、インターネット全体でかなりの議論がなされているトピックです。今日まで、私はこれら 2 つの違いを見たことがありませんでした。そこで私はさらに進んで、それらの違いを見つけようとしました。最後に、それに関するドキュメント全体を読み、これに対する答えを見つけました。
したがって、ドキュメント (少なくとも PostgreSQL) を見ると、次のフレーズを見つけることができます。
「単語INNER
とOUTER
はすべての形式でオプションINNER
です。デフォルトはLEFT
、、、RIGHT
およびFULL
外部結合を意味します。」
言い換えれば、
LEFT JOIN
とLEFT OUTER JOIN
同じです
RIGHT JOIN
とRIGHT OUTER JOIN
同じです
まだ答えを見つけようとしている人に貢献できることを願っています。
Join は、次の順序で考えるとわかりやすいと思います。
- CROSS JOIN - 両方のテーブルのデカルト積。すべての参加はここから始まります
- INNER JOIN - フィルターが追加された CROSS JOIN。
- OUTER JOIN - 不足している要素 (LEFT または RIGHT テーブルのいずれか) を後で追加した INNER JOIN。
この (比較的) 単純なモデルを理解するまで、JOINS は常に黒魔術のようなものでした。今では完全に理にかなっています。
これが混乱する以上に役立つことを願っています。
LEFT/RIGHT と LEFT OUTER/RIGHT OUTER が同じなのはなぜですか? この語彙の理由を説明しましょう。LEFT および RIGHT 結合は OUTER 結合の特定のケースであるため、OUTER LEFT/OUTER RIGHT 以外の何物でもないことを理解してください。OUTER 結合は、OUTER 結合のPARTIAL結果であるLEFT および RIGHT 結合とは対照的に、FULL OUTERとも呼ばれます。それはそう:
Table A | Table B Table A | Table B Table A | Table B Table A | Table B
1 | 5 1 | 1 1 | 1 1 | 1
2 | 1 2 | 2 2 | 2 2 | 2
3 | 6 3 | null 3 | null - | -
4 | 2 4 | null 4 | null - | -
null | 5 - | - null | 5
null | 6 - | - null | 6
OUTER JOIN (FULL) LEFT OUTER (partial) RIGHT OUTER (partial)
これらの操作にエイリアスがある理由は明らかであり、INNER、OUTER、CROSS の 3 つのケースしか存在しないことも明らかです。OUTER用サブケース2個付き。語彙、教師がこれを説明する方法、および上記のいくつかの回答から、さまざまな種類の結合があるように見えることがよくあります。しかし、実際には非常に単純です。
あなたの質問に答えるために
Sql Server 結合構文では、 OUTERはオプションです
msdn の記事に記載されています: https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx
したがって、次のリストは、 OUTERを使用する場合と使用しない場合の同等の結合構文を示しています。
LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN
その他の同等の構文
INNER JOIN => JOIN
CROSS JOIN => ,
強くお勧めします Dotnet Mob Artice : Joins in Sql Server
JOINには主に3つのタイプがあります
- 内部: 両方のテーブルに存在するデータをフェッチします
- JOIN のみが INNER JOIN を意味します
アウター:3タイプ
- LEFT OUTER - - 左側のテーブルにのみ存在するデータと一致する条件をフェッチします
- RIGHT OUTER - - 右側のテーブルにのみ存在するデータと一致する条件を取得します
- FULL OUTER - - いずれかまたは両方のテーブルに存在するデータをフェッチします
- (LEFT or RIGHT or FULL) OUTER JOIN は "OUTER" を書かなくても書ける
Cross Join: すべてのものをすべてのものに結合します
シンタックスシュガーは、結合が内部のものではないことをカジュアルな読者にもっと明白にします。