SQL ServerでのLEFT JOINとLEFT OUTER JOIN
-
03-07-2019 - |
質問
LEFT JOIN
と LEFT OUTER JOIN
の違いは何ですか?
解決
ドキュメントに従って: FROM(Transact-SQL ):
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
キーワード OUTER
はオプションとしてマークされています(角括弧で囲まれています)。この場合の意味は、指定するかどうかは関係ありません。 join句の他の要素もオプションとしてマークされていますが、 them を省略するともちろん違いが生じることに注意してください。
たとえば、 JOIN
句のtype-part全体はオプションです。この場合、 JOIN
を指定しただけで、デフォルトは INNER
です。 >。つまり、これは合法です:
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左結合vs FROM行の複数のテーブル?。
他のヒント
質問に答えるために LEF JOINに違いはありません とLEFT OUTER JOIN、それらはまったく同じですと言いました...
最上位には、主に3種類の結合があります:
- 内部
- 外部
- クロス
-
INNER JOIN -両方のテーブルに存在する場合、データを取得します。
-
外部結合には 3 タイプがあります:
-
LEFT OUTER JOIN
-左のテーブルに存在する場合、データを取得します。 -
RIGHT OUTER JOIN
-右側のテーブルに存在する場合はデータを取得します。 -
FULL OUTER JOIN
-2つのテーブルのいずれかに存在する場合、データを取得します。
-
-
CROSS JOIN は、その名前が示すように、すべてをすべてに結合する
[n X m]
を実行します。
(SELECT
ステートメントのFROM
句で)結合するテーブルを単純にリストするシナリオと同様に、コンマを使用してテーブルを区切ります。
注意点:
- 単に
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)を見ると、次のフレーズがあります:
つまり、
LEFT JOIN
と LEFT OUTER JOIN
は同じです
右結合
および右外側結合
は同じです
まだ答えを見つけようとしている人たちに貢献できることを願っています。
次の順序で結合を考える方が簡単だと思います:
- CROSS JOIN-両方のテーブルのデカルト積。すべての参加はここから始まります
- 内部結合-フィルターが追加された相互結合。
- OUTER JOIN-要素が欠落しているINNER JOIN(LEFTまたはRIGHTテーブルから) 後で追加。
この(比較的)単純なモデルを見つけ出すまで、JOINSは常に少し黒っぽい芸術でした。今、彼らは完璧な意味を持っています。
これが混乱する以上に役立つことを願っています。
なぜLEFT / RIGHTとLEFT OUTER / RIGHT OUTERは同じですか?この語彙の理由を説明しましょう。 LEFT結合とRIGHT結合はOUTER結合の特定のケースであり、したがってOUTER LEFT / OUTER RIGHT以外にはならないことを理解してください。 OUTER結合は、OUTER結合の部分的結果である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)
これらの操作にエイリアスがある理由は明らかです。また、3つのケースのみが存在することも明らかです:INNER、OUTER、CROSS。 OUTERの2つのサブケース。 語彙、教師がこれを説明する方法、および上記のいくつかの回答は、多くの場合、さまざまな種類の結合があるように見えます。しかし、実際には非常に簡単です。
質問に答える
SQL Serverの結合構文では、外部はオプションです
これは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の参加
主に3種類のJOINがあります
- 内部:両方のテーブルにあるデータを取得します
- JOINのみが内部結合を意味する
-
外側:3つのタイプがあります
- LEFT OUTER--左のテーブルにのみ存在するデータを取得&amp;一致条件
- RIGHT OUTER--右側のテーブルにのみ存在するデータを取得&amp;一致条件
- FULL OUTER--いずれかまたは両方のテーブルに存在するデータを取得します
- (LEFTまたはRIGHTまたはFULL)OUTER JOINは、&quot; OUTER&quot;と書かなくても書くことができます
-
クロス結合:すべてをすべてに結合します
結合は3つのみです:
- A)クロス結合=デカルト(例:表A、表B)
- B)内部結合= JOIN(例:テーブルA結合/内部結合テーブル B)
-
C)外部結合:
There are three type of outer join 1) Left Outer Join = Left Join 2) Right Outer Join = Right Join 3) Full Outer Join = Full Join
役立つことを願っています。
シンタックスシュガー。結合が内部結合ではないことを、カジュアルな読者に明らかにします。
この質問に関連して、2つの「APPLY」演算子も投稿したいと思います。
参加:
-
内部結合 =結合
-
外部参加
-
LEFT OUTER JOIN = LEFT JOIN
-
RIGHT OUTER JOIN = RIGHT JOIN
-
完全な外部結合=完全な結合
-
-
クロスジョイン
SELF-JOIN :これは、まったく別の種類の結合ではありません。これは基本的に、上記の結合の1つを使用してテーブルをそれ自体に結合します。しかし、SQL Developerコミュニティの多くの人からこの用語を聞くので、JOINの議論のコンテキストで言及する価値があると感じました。
適用:
- クロス適用-INNER JOINに似ています(ただし、Leftテーブルの各行についてRightテーブルで何かを計算できるという利点が追加され、一致する行のみが返されます)
- 外部適用-LEFT OUTER JOINに似ています(ただし、Leftテーブルの各行についてRightテーブルで何かを計算できるという利点を追加し、Leftからすべての行を返します右のテーブルでの一致に関係なく、テーブル)
https:// www。 mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/
https://sqlhints.com/2016/ 10/23 / outer-apply-in-sql-server /
APPLY演算子は、サブクエリで同じ計算を行うよりもパフォーマンスが向上するため、非常に有益だと思います。また、古いバージョンのSQL Serverの多くの分析関数の代わりにもなります。そのため、JOINSに慣れた後、SQL開発者の1人が次にAPPLY演算子を学習する必要があると考えています。