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

Oracle(+)外部結合と定数値

    同等の「ANSIJOIN」構文を使用してこれを説明します:

    オプション1

    SELECT *
    FROM TXN
    LEFT JOIN CHK 
      ON TXN.CHK_ID = CHK.CHK_ID
    WHERE TXN.CURRENT = 'Y'
    AND CHK.CURRENT = 'Y'
    

    オプション2

    SELECT *
    FROM TXN
    LEFT JOIN CHK 
      ON TXN.CHK_ID = CHK.CHK_ID 
      AND CHK.CURRENT = 'Y'
    WHERE TXN.CURRENT = 'Y'
    

    ご覧のとおり、オプション1では、定数述語が後に適用されます。 LEFT JOIN テーブル式が指定されています。つまり、LEFT JOINの結果に基づいています。 。

    オプション2では、定数述語の1つがLEFT JOINの一部です。 式。

    LEFT JOINはどのように機能しますか 仕事ですか?

    LEFT JOINのアイデア LEFTからすべての行を返すということです JOINの側面 結合述語が与えられた場合、反対側に一致する行があるかどうかに関係なく、式。したがって、オプション2では、CHKに行が見つかったかどうかに関係なく CURRENT = 'Y'を使用 TXNの行の場合 、TXNの行 まだ返されます。これが、オプション2でより多くの行を取得する理由です。

    また、この例では、「ANSIJOIN」構文を使用する理由を説明する必要があります。メンテナンス/読みやすさの観点から、クエリが何をしているのかがはるかに明確になります。



    1. phpとmysqlを使用した通知システム

    2. SQL Server 2017:SSISを使用したLinuxからSalesforceへのCSVデータのインポート

    3. OSGi上のPostgreSQLコネクタ

    4. mysqlストアドプロシージャ、存在するかどうかを確認するためのクエリ