web-dev-qa-db-ja.com

SQL ServerでのLEFT JOINとLEFT OUTER JOINの比較

LEFT JOINLEFT OUTER JOINの違いは何ですか?

1421
KG Sosa

ドキュメントに従って: FROM(Transact-SQL)

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

キーワードOUTERはオプションとしてマークされています(角括弧で囲まれています)。この特定のケースでは、OUTERを指定してもしなくても違いはありません。結合句の他の要素もオプションとしてマークされているが、themoutwill違いを生みます。

たとえば、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の左結合vs FROM行の複数のテーブル?

enter image description here

あなたの質問に答えるために LEFT JOINとLEFT OUTER JOINの間に違いはありません、それらは全く同じです それは言った...

トップレベルでは、主に3種類の結合があります。

  1. 内部
  2. クロス

  1. INNER JOIN - 両方のテーブルにデータが存在する場合はデータをフェッチします。

  2. OUTER JOIN 3 の型です。

    1. LEFT OUTER JOIN - 左側のテーブルに存在する場合はデータを取得します。
    2. RIGHT OUTER JOIN - 右側のテーブルにデータが存在する場合はデータを取得します。
    3. FULL OUTER JOIN - 2つのテーブルのどちらかに存在する場合はデータをフェッチします。
  3. CROSS JOIN は、その名のとおり、すべてをすべてに結合する[n X m]を実行します。
    結合するテーブルを単純に(FROMステートメントのSELECT節に)リストし、それらを区切るためにコンマを使用するシナリオと同様です。


注意すべき点:

  • JOINに言及したばかりの場合、デフォルトではINNER JOINです。
  • OUTER結合はLEFT |でなければなりません。 RIGHT | FULLあなたは単にOUTER JOINと言うことはできません。
  • OUTERキーワードを削除して、LEFT JOINRIGHT JOIN、またはFULL JOINと入力するだけです。

より良い方法でこれらを視覚化したい人のために、このリンクに行きなさい: SQL結合の視覚的説明

670
sactiw

左結合と左外結合の違いは何ですか?

何もない LEFT JOINLEFT OUTER JOINは同等です。

325
Mitch Wheat

私はPostgreSQL DBAです。外部結合の違いと外部結合の違いの違いを理解することができるかぎり、インターネット全体でかなりの議論があるトピックです。今日まで私はこれら2つの違いを見たことがありませんでした。だから私はさらに進んで、それらの違いを見つけようとします。最後に私はそれに関する全体のドキュメントを読みました、そして私はこれに対する答えを見つけました、

ですから、(少なくともPostgreSQLの)ドキュメンテーションを見ると、このフレーズが見つかります。

"INNERおよびOUTERはすべての形式でオプションです。INNERがデフォルトです。LEFTRIGHT、およびFULLは外部結合を意味します。

言い換えれば、

LEFT JOINLEFT OUTER JOINは同じです

RIGHT JOINRIGHT OUTER JOINは同じです

私はそれがまだ答えを見つけようとしている人々のための貢献になることを願っています。

61
andrefsp

Left JoinLeft Outer Joinは1で、 同じ です。前者は後者の省略形です。 Right JoinRight Outer Joinの関係についても同じことが言えます。デモンストレーションは平等を説明します。各クエリの動作例はSQL Fiddleで提供されています。このツールは、クエリを実際に操作するためのものです。

与えられた

enter image description here

左結合 および 左外結合

enter image description here

結果

enter image description here


Right Join および Right Outer Join

enter image description here

結果

enter image description here

55
WorkSmarter

次の順序で結合を考えるのは簡単です。

  • CROSS JOIN - 両方のテーブルのデカルト積。すべての参加はここから始まります
  • 内部結合 - フィルタが追加された交差結合。
  • OUTER JOIN - 後から追加された(LEFTテーブルまたはRIGHTテーブルからの)欠落要素を含む内部結合。

私がこの(比較的)単純なモデルを考え出すまで、JOINSは常にもう少し黒い芸術でした。今、彼らは完璧に理にかなっています。

これが混乱する以上に役立つことを願っています。

38
frozenjim

LEFT/RIGHTとLEFT OUTER/RIGHT OUTERが同じなのはなぜですか?なぜこの語彙を説明しましょう。左結合と右結合はOUTER結合の特定のケースであり、したがってOUTER LEFT/OUTER RIGHT以外にはあり得ないことを理解してください。 OUTER結合の結果がPARTIALであるLEFT結合およびRIGHT結合とは対照的に、OUTER結合は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つのサブケース付き。語彙、教師がこれを説明する方法、および上記のいくつかの回答により、多くの場合、さまざまな種類の結合があるように見えます。しかし、それは実際にはとても簡単です。

28
Yugo Amaryl

あなたの質問に答えるために

SQL Serverでは構文 _ outer _ を結合します

これはmsdnの記事で言及されています: https://msdn.Microsoft.com/ja-jp/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に参加enter image description here

20
mass

主に3つのタイプがあります

  1. 内部:両方のテーブルに存在するデータを取得します
    • 内部結合を意味するのはJOINだけです
  2. 外:3種類あります

    • LEFT OUTER - - 左テーブルと一致条件にのみ存在するデータを取得します
    • RIGHT OUTER - - 正しいテーブルと一致条件にのみ存在するデータを取得します。
    • FULL OUTER - - いずれかまたは両方のテーブルに存在するデータを取得します
    • (左または右または全)OUTER JOINは "OUTER"を書かずに書くことができます。
  3. クロス結合:すべてをすべてに結合します

18
Harsh

結合は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    
    

助けになれば幸いです。

18
Delickate

統語的な砂糖は、結合が内側のものではないことをカジュアルな読者にとってより明白にします。

14
Unsliced

この質問のコンテキストで、2つの「APPLY」演算子も投稿したいと思います。

結合

  1. INNER JOIN= JOIN

  2. OUTER JOIN

    • LEFT OUTER JOIN = LEFT JOIN

    • 右外部結合=右結合

    • FULL OUTER JOIN = FULL JOIN

  3. CROSS JOIN

SELF-JOIN:これは、厳密に別の種類の結合ではありません。これは基本的に、上記の結合の1つを使用してテーブルをそれ自体に結合します。しかし、SQL Developerコミュニティの多くの人からこの用語を聞くので、JOINの議論のコンテキストで言及する価値があると感じました。

適用

  1. CROSS APPLY-INNER JOINに似ています(ただし、Leftテーブルの各行についてRightテーブルで何かを計算できるという利点が追加され、一致する行のみを返します)
  2. OUTER APPLY-LEFT OUTER JOINと同様(ただし、Leftテーブルの各行についてRightテーブルの何かを計算できるという利点が追加され、右テーブルでの一致に関係なく、左テーブルからすべての行を返します)

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演算子の学習を試みる必要があると思います。

2
san