2021.09.08
SQLチューニング(第13回)「スカラーサブクエリの理解と効率的なSQLの作成」(3/5)
今回は、スカラーサブクエリでデータが抽出されないことについてです。
3.1.1.3 データが抽出されなくてもよい
スカラ副問い合わせはNULLデータを抽出してもSQLの実行に影響を与えない。もし、スカラ副問い合わせでNULLデータを任意の値に置換したい場合は、以下のSQLのようにNVL関数を使用すればよい。
SELECT c1,
c2,
c3,
NVL((SELECT NULL
FROM SCALAR_T2 T2
WHERE t2.c2 = t1.c2
AND ROWNUM <= 1 ---> 1件だけ抽出するように条件追加
),'ISNULL') AS t2_c1 ---> NULL抽出
FROM SCALAR_T1 T1
WHERE c2 = 'A'
AND ROWNUM <= 1 ;
C1 C2 C3 T2_C1
------- -- ---------- ------
26 A 100025 ISNULL
これまで調べてみたサブクエリの特性を総合的にみれば、スカラーサブクエリは最大結果件数回反復実行して、抽出件数は常に1件以下であり、NULLデータを抽出する場合にも実行が可能だということが分かる。
「常に1件以下のデータの抽出」と「NULLデータの抽出が可能」という2つの特徴は、スカラーサブクエリは、SQLの抽出件数に影響を与えないことを意味する。そこで、この2つの特徴のために、スカラーサブクエリを結合に変更する場合、必ず結合接続カラムが重複した値を持たないようにしなければならず、結合はOuter Joinを行わなければならない。
今回はここまでです。次回は、スカラーサブクエリと結合についてです。ご期待ください。では、また。See You ^^