違いは何であるLEFT JOIN
とはLEFT OUTER JOIN
?
違いは何であるLEFT JOIN
とはLEFT OUTER JOIN
?
回答:
ドキュメントに従って:FROM(Transact-SQL):
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
キーワードOUTER
はオプションとしてマークされています(角括弧で囲まれています)。この特定のケースでは、指定してOUTER
もしなくても違いはありません。他の要素が句に参加しながらも残して、オプションとしてマークされていることに注意してアウトになるの違いを作ります。
たとえば、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行の複数のテーブル?。
INNER JOIN
右側とJOIN
左側に配置する方が良いでしょうか?
JOIN
sについても同じようにフォローすると、一貫性があると思いました。
あなたの質問に答えるために、LEFT JOINとLEFT OUTER JOINの間に違いはありません、彼らは言ったのとまったく同じです...
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
or またはと発声することができますFULL JOIN
。これらをより良い方法で視覚化したい人は、このリンクにアクセスしてください: SQL結合の視覚的説明
CROSS JOIN
、と同じFULL JOIN
ですか?
Cross Join
とFull Outer Join
... の違いについての貴重な回答に特別な注記を追加することを検討します。
左結合と左外部結合の違いは何ですか?
何もない。LEFT JOIN
とLEFT OUTER JOIN
同等です。
OUTER
がオプションである理由についての参照または説明を追加すると便利です。
私はPostgreSQLのDBAですが、外部結合の違いと外部結合の違いの違いを理解できる限り、インターネット全体でかなり議論されているトピックです。今日まで、これらの2つの違いを見たことがありませんでした。それで私はさらに進んで、それらの違いを見つけようとします。最後に、ドキュメント全体を読み、その答えを見つけました。
したがって、ドキュメント(少なくともPostgreSQLでは)を見ると、次のフレーズを見つけることができます。
「言葉INNER
とOUTER
、すべての形態のオプションです。INNER
デフォルトで、LEFT
、RIGHT
、とFULL
。外部結合を意味するものではあり」
つまり、
LEFT JOIN
そして、LEFT OUTER JOIN
同じです
RIGHT JOIN
そして、RIGHT OUTER JOIN
同じです
それがまだ答えを見つけようとしている人のための貢献になることを願っています。
LEFT / RIGHTとLEFT OUTER / RIGHT OUTERが同じなのはなぜですか?なぜこの語彙なのかを説明しましょう。LEFTおよびRIGHT結合はOUTER結合の特定のケースであるため、OUTER LEFT / OUTER RIGHT以外にはなり得ないことを理解してください。OUTERも呼ばれる参加FULL LEFTとRIGHTとは対照的に、OUTERはそれがある参加しPARTIAL 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つのサブケース。語彙、教師がこれを説明する方法、および上記のいくつかの回答により、多くの場合、さまざまな種類の結合があるように見えます。しかし、それは実際には非常に簡単です。
JOIN
意味するINNER JOIN
」と外部結合語彙の推論に適合するかどうか、またはどのように説明することができますか?
あなたの質問に答えるために
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を強くお勧めします:SQL Serverへの参加
構文糖は、結合が内部結合ではないことをカジュアルな読者に明らかにします。
この質問に関連して、2つの「APPLY」演算子も投稿したいと思います。
結合:
INNER JOIN = JOIN
外部結合
LEFT OUTER JOIN = LEFT JOIN
RIGHT OUTER JOIN = RIGHT JOIN
FULL OUTER JOIN = FULL JOIN
CROSS JOIN
自己結合:これは、別のタイプの結合ではありません。これは基本的に、上記のいずれかの結合を使用してテーブルをそれ自体に結合します。しかし、SQL開発者コミュニティの多くの人からこの用語が聞こえるので、JOINディスカッションのコンテキストで言及する価値があると感じました。
適用:
https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/
https://sqlhints.com/2016/10/23/outer-apply-in-sql-server/
実際の例、SQLでOUTER / CROSS APPLYを使用する場合
APPLY演算子は、サブクエリで同じ計算を行う必要がある場合よりもパフォーマンスが向上するため、非常に有益です。また、SQL Serverの古いバージョンの多くの分析関数の代わりにもなります。そのため、JOINSに慣れた後は、SQL開発者の1人が次にAPPLY演算子について学習する必要があると思います。
OUTER
キーワードはオプションです。