SQL IN句をEXISTS句に変換する方法
IN
句をEXISTS
句に変換する方法を紹介します。
IN
句よりもEXISTS
句のほうがパフォーマンスが良くなる場合が多いので、主にレスポンス対策としてこの書き換えを行うことが多いと思います。
例えば以下のようにIN
句を使ったSQL
があるとします。
SELECT
T1.社員名
FROM
社員マスタ T1
WHERE
T1.社員コード IN (
SELECT
S1.社員コード
FROM
退職社員マスタ S1
)
EXISTS
句を使用して書きなおしたSQL
は以下のようになります。
SELECT
T1.社員名
FROM
社員マスタ T1
WHERE
EXISTS (
SELECT
1
FROM
退職社員マスタ S1
WHERE
T1.社員コード = S1.社員コード
)
基本的には、A IN (SELECT B FROM ...)
となっているのを、EXISTS (SELECT 1 FROM ... WHERE A=B)
と置き換えるような考え方で大丈夫だと思います。