sql >> データベース >  >> RDS >> Oracle

Oracle 11gで+記号を使用した左外部結合

    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 は一般的に推奨されず、明示的な構文が推奨されます。



    1. SQLServerテーブルで列をNullから非Nullに変更する方法-SQLServer/T-SQLチュートリアルパート52

    2. SQL日付をDateTimeに変換する方法は?

    3. SQL Server:UNION 後の INNER JOIN によりハッシュ一致が遅くなる (集計)

    4. 引用符でSQLステートメントを書く方法は?