SQL99で共通表式と呼ばれている記述方法、WITH句を使ってみる。
■元のSQL…外側のSELECTのFROMにサブクエリーを記述。
SELECT * FROM EMP A , ( SELECT EMPNO FROM EMP WHERE SAL > 2000) OVER2K
WHERE OVER2K.EMPNO = A.EMPNO;
■WITH句を使って書き換えた例。冒頭でサブクエリーを記述し、ビューのように使用できる。
WITH OVER2K AS ( SELECT EMPNO FROM EMP WHERE SAL > 2000)
SELECT * FROM EMP A , OVER2K
WHERE OVER2K.EMPNO = A.EMPNO;
この単純な例ではあまり恩恵はないですが、システムに数個は出現する(?)巨大なSELECTを記述する際には見やすさで有効と思います。
長大SQLって、パズル組み立てるみたいで面白さもあるけど、大体後で見ると訳わかんないことが多いので。他人のとか特に。
前段にWITHで分離して記述されているだけでも、読みやすいと思われます。
もしかしたらUNIONで何回も使うサブクエリーをWITH句に記述したら最適化されやすかったりして!?
■元のSQL…外側のSELECTのFROMにサブクエリーを記述。
SELECT * FROM EMP A , ( SELECT EMPNO FROM EMP WHERE SAL > 2000) OVER2K
WHERE OVER2K.EMPNO = A.EMPNO;
■WITH句を使って書き換えた例。冒頭でサブクエリーを記述し、ビューのように使用できる。
WITH OVER2K AS ( SELECT EMPNO FROM EMP WHERE SAL > 2000)
SELECT * FROM EMP A , OVER2K
WHERE OVER2K.EMPNO = A.EMPNO;
この単純な例ではあまり恩恵はないですが、システムに数個は出現する(?)巨大なSELECTを記述する際には見やすさで有効と思います。
長大SQLって、パズル組み立てるみたいで面白さもあるけど、大体後で見ると訳わかんないことが多いので。他人のとか特に。
前段にWITHで分離して記述されているだけでも、読みやすいと思われます。
もしかしたらUNIONで何回も使うサブクエリーをWITH句に記述したら最適化されやすかったりして!?