/ /結合のさまざまな組み合わせが混乱している、誰かがそれを少し煮詰めることができますか? - sql、sql-server、sql-server-2005、tsql

参加のさまざまな組み合わせが混乱している、誰かがそれを少し煮詰めることができますか? - sql、sql-server、sql-server-2005、tsql

今週末にJOINを見ています。

私はJoinで読んでいて、JOIN、LEFT、RIGHT、OUTER、FULL、INNERの組み合わせのトンを見ていました。私はMSDNのドキュメントをチェックし、唯一許可されている組み合わせが次の形式であるように見えます:

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

それで、私はあなたが得ることができると考えている:

JOIN / INNER JOIN
LEFT JOIN / LEFT OUTER JOIN
RIGHT JOIN / RIGHT OUTER JOIN
FULL JOIN / FULL OUTER JOIN

また、OUTERはオプションのキーワードであるようですLEFT JOINとLEFT OUTER JOINは本当に同じです。これは正しいです? JOINとFULL OUTER JOINの違いは何ですか?私はスクリプトでJOINだけを見たことがありますが、クエリが少し複雑だったので、それを分解することはできませんでした。

回答:

回答№1の場合は10

http://www.codinghorror.com/blog/archives/000976.html

私が見た最も良い説明の一つを持っています。


回答№2については4

結合には、CROSS、INNER、およびOUTERの3種類しかありません。

  • クロスジョイントリターン すべて 両方のテーブルからの行の可能な組み合わせであり、頻繁に使用されることはありません。
  • 内部ジョインは、 どちらも テーブルは結合条件と一致します。
  • 外部結合は、1つの表を「起点」表として選択し、常にその表からすべての行を戻します。他のテーブルに一致するものがなければ、NULL値が与えられます。

外部結合(および外部結合のみ)には、LEFT、RIGHTおよびFULLという3つのサブタイプもあります。

  • 左結合の場合、最初のテーブルは元テーブルです。
  • 右結合の場合は、2番目のテーブルが元テーブルです。
  • 完全結合の場合は、両方の表が起点表です。

LEFT、RIGHT、およびFULLはOUTER結合にのみ適用されるため、OUTERキーワードは、単純に外部結合の種類を指定するために省略されます(LEFT JOINのみ)。


回答№3の場合は1

これらはすべて、表ソース間で有効な構文です。

JOIN
INNER JOIN
LEFT JOIN
LEFT OUTER JOIN
RIGHT JOIN
RIGHT OUTER JOIN
FULL JOIN
FULL OUTER JOIN

それぞれには、次のON句が必要です。

あなたはOUTERがオプションであるということは間違いないので、RIGHT JOINはRIGHT OUTER JOINと同じで、LEFTとFULLも同様です。また、noがある場合はINNERはオプションであるため、JOINはINNER JOINと同じです。

また、CROSS JOINもあります。これはカンマと同じで、ON句がありません。言い換えると、

FROM A CROSS JOIN B

そして

FROM A,B

まったく同じことを意味します。

テーブル演算子JOINとFULL OUTER JOINは全く同じではありません。テーブルソース

FROM A JOIN B ON <condition>

真である行のみが含まれています。一方、テーブルソース

FROM A FULL OUTER JOIN B ON <condition>

真である行が含まれています に加えて 同じON句でLEFT OUTER JOINまたはRIGHT OUTER JOINのいずれかに入っているすべての追加行。


回答№4の場合は1

サポートされている組み合わせよりも多くの組み合わせが表示されます:

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

これはあなたが持つことができると言う:

       JOIN                    INNER JOIN
LEFT  JOIN              LEFT  OUTER JOIN
RIGHT JOIN              RIGHT OUTER JOIN
FULL  JOIN              FULL  OUTER JOIN

キーワードOUTERはオプションです。つまり、完全なSQL標準では、NATURAL JOINまたはCROSS JOINを使用することもできます。キーワードINNERもオプションです。プレーンな "JOIN"はINNER JOINです。

実際には、あなたの答えの書式は、私があなたを「正しく理解していないと思うように導いた、LEFT JOINを使ってINNER JOINを走らせました(誰もいなくてもすぐに修正します)。

フル・ジョインは、プレーンと根本的に異なります(INNER)JOIN。 INNER JOINは、指定された基準(ON句またはUSING句で指定)に基づいています。 LEFT OUTER JOINは、INNER JOINの行と、右側の表の各列にNULLで拡張された右側の表と結合されていない左側の表の行から構成されます。これは「左外側増分」と呼ばれることがあります。 RIGHT OUTER JOINは、外部結合の感覚を逆転させます(したがって、「右外側増分」があります)。 FULL JOINは、INNER JOINと左外側インクリメントと右外側インクリメントの和集合で構成されます。 FULL JOINの結果には主キーがありません。なぜなら、一般に各列にはNULLがあるからです。


回答№5の場合は0

SQL joinに関するWikipediaの記事 かなり明確で多くの例があります。