sql-server - 違い - sqlserver 外部結合演算子




LEFT JOINとSQL ServerのLEFT OUTER JOIN (11)

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


LEFT JOINは、最初の(一番左の)表から開始し、次に一致する2番目(一番右)の表レコードからLEFT JOIN実行します。

LEFT JOINLEFT OUTER JOINは同じです。

DoFactoryによると


あなたの質問答えるためにLEFT JOINとLEFT OUTER JOINの間に違いはなく、まったく同じです...

トップレベルには主に3種類のジョインがあります:

  1. インナー
  2. クロス
  1. INNER JOIN - 両方のテーブルにデータが存在する場合、データをフェッチします。

  2. OUTER JOIN3種類あります:

    1. LEFT OUTER JOIN - 左側のテーブルにデータがある場合はフェッチします。
    2. RIGHT OUTER JOIN - 右の表にデータがある場合はフェッチします。
    3. FULL OUTER JOIN - 2つのテーブルのいずれかにデータが存在する場合、データをフェッチします。
  3. CROSS JOINは、名前が示唆するように、すべてをすべてに結びつける[n X m]です。
    SELECT文のFROM句で)結合するテーブルを単にリストするシナリオと同様に、カンマを使用してそれらを区切ります。

注目すべきポイント:

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

これらをより良い方法で視覚化したい人は、次のリンクを参照してください。SQL結合の視覚的説明


わずか3つの結合があります。

  • A)交差結合=デカルト(例えば、表A、表B)
  • B)内部結合=結合(例えば、テーブル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    
    

それが助けてくれることを願って。


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つのサブケース。 ボキャブラリー、先生がこれを説明する方法、そして上記の答えは、多くの異なるタイプの参加があるように見えることがよくあります。 しかし、実際それは非常に簡単です。


Left JoinLeft Outer Join同じものです。 前者は後者の省略形です。 Right JoinRight Outer Join関係についても同じことが言えます。 デモでは、平等を説明します。 各問合せの作業例は、 SQL Fiddleを介して提供されています 。 このツールを使用すると、クエリを操作することができます。

与えられた

左結合左外結合

結果

右結合右外結合

結果


あなたの質問に答える

SQL Serverで結合構文OUTERはオプションです

msdnの記事に記載されていhttps://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx ://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx

したがって、次のリストは、 OUTERの有無に関わらず同等の構文を結合することを示しています

LEFT OUTER JOIN => LEFT JOIN
RIGT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN

その他の同等の構文

INNER JOIN => JOIN
CROSS JOIN => ,

強く推奨されるDotnet Mob Artice: SQL Serverの結合


すでにここで述べたように、違いはありません。 キー・ワールドOUTERは、SQLキーワード・ディクショナリから削除することができますが、私たちが書くことができるクエリの表現力を失うことはありません。

また、1つだけで十分ですので、 RIGHTLEFT両方のキーワードは必要ありません。 これはSELECT * FROM A RIGHT JOIN B on A.ID = B.ID SELECT * FROM B LEFT JOIN A on A.ID = B.IDとまったく同じであるためSELECT * FROM B LEFT JOIN A on A.ID = B.ID 。 私はこれらの余分な言葉がすべて学生と初心者を混乱させるのを発見しました。


ドキュメントごとに: FROM(Transact-SQL)

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

キーワードOUTERは省略可能(角括弧で囲まれています)とマークされています。この場合は、指定したかどうかによって違いはありません。 join節の他の要素もオプションとしてマークされていますが、 それらを残しておくことはもちろん違いになります。

たとえば、 JOIN句の型部分全体はオプションです。この場合、 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は、FROMの行に複数のテーブルを結合に残った? 。


文法的な砂糖は、結合が内側のものではないということをカジュアルリーダーにもっと明白にします。


私はJoinsを次の順序で考えるほうが簡単です:

  • CROSS JOIN - 両方のテーブルのデカルト積。 すべての参加がここから始まります
  • INNER JOIN - フィルターが追加されたクロスジョイン。
  • OUTER JOIN - 後でLEFTまたはRIGHTテーブルの要素が欠落したINNER JOINが追加されました。

私がこの(比較的)シンプルなモデルを見つけ出すまで、ジョインズは常にもう少し黒人の芸術でした。 今、彼らは完璧な意味を持っています。

これが混乱する以上のことを助けることを願っています。


私はこれが古いですが、私の2セントを入れたいと思っていますLEFT JOINLEFT OUTER JOINと同じになるはずですが、私の経験でLEFT JOINLEFT OUTER JOINよりも別の結果を引き戻すのを見ました。より具体的かつ適切であるようにキーワード「 OUTERを使用し始めました。 LEFT JOIN戻ってきたはずの行は、 LEFT OUTER JOIN使用したときのようにはありませんでした。 私は同僚にこれを説明しようとしていました。彼が必要な行を手に入れることができなかったときに、私はGoogleに彼に何らかの裏付けがあるようにその違いを決めました。 これは私が不確かなSQL Server固有のものかもしれません。 良い例では、外部結合が必要であることを明示的に述べることをお勧めします。 ちょうど私の意見。





outer-join