TableA LEFT OUTER JOIN TableB
TableB RIGHT OUTER JOIN Table A
と同等です .
Oracle では、(+)
JOIN の「オプション」テーブルを示します。したがって、最初のクエリでは、それは P LEFT OUTER JOIN S
です . 2 番目のクエリでは、S RIGHT OUTER JOIN P
です。 . 機能的に同等です。
用語では、RIGHT または LEFT は、結合のどちら側が常にレコードを持つかを指定し、反対側は null の可能性があります。 P LEFT OUTER JOIN S
で 、 P
LEFT
にあるため、常にレコードがあります 、しかし S
null の可能性があります。
java2s.com のこの例 を参照してください 追加の説明が必要です。
明確にするために、用語は視覚化を支援するためだけに存在するため、用語は問題ではないと言っていると思います。重要なのは、それがどのように機能するかという概念を理解することです.
右対左
暗黙の結合構文で RIGHT と LEFT を判断する際に何が重要かについて、混乱を招いています。
左外部結合
SELECT *
FROM A, B
WHERE A.column = B.column(+)
右外部結合
SELECT *
FROM A, B
WHERE B.column(+) = A.column
WHERE 句の用語を入れ替えただけですが、機能的には同等です。 (詳細については、私の回答の上部を参照してください。) (+)
の配置 RIGHT または LEFT を決定します。 (具体的には、(+)
が右側にあり、LEFT JOIN です。 (+)
の場合 が左側にあり、RIGHT JOIN です。)
結合の種類
JOIN の 2 つのスタイルは暗黙の JOIN です および明示的なJOIN .これらは JOIN の記述スタイルが異なりますが、機能的には同等です。
この SO の質問 を参照してください .
暗黙の JOIN すべてのテーブルをまとめてリストするだけです。結合条件はWHERE句で指定します。
暗黙の結合
SELECT *
FROM A, B
WHERE A.column = B.column(+)
明示的な結合 WHERE 句ではなく、特定のテーブルの包含に結合条件を関連付けます。
明示的な結合
SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column
これらの暗黙的な JOIN は、読み取りと理解がより困難になる可能性があり、結合条件が他の WHERE 条件と混在しているため、いくつかの制限もあります。そのため、暗黙的な JOIN は一般的に推奨されず、明示的な構文が推奨されます。