본문 바로가기

SQL 튜닝의 시작

[ SQL ] 스칼라 서브쿼리의 특성

스칼라 서브쿼리

  • Select Column List절에 사용된 서브쿼리

특성

1. 최대 결과 건수만큼 반복적으로 수행된다.

  • "최대" 반복 수행 되는 횟수는 SQL의 결과 건수이다.
  • Deterministic 속성을 가지고있다.
  • 동일한 입력 값에 대해 결과 값이 항상 같다는 것을 보장한다.

2. 추출되는 데이터는 항상 1건만 유효하다.

  • 추출되는 데이터가 1건을 초과한다면, "ROWNUM <= 1"조건을 추가해준다.
select c1,c2,c3
    (select t2.c1 from scalar_t2 t2 where t2.c2 = t1.c2 
    and ROWNUM <= 1) as t2_c1
from scalar_t1 t1
where c2 = 'A'
and ROWNUM <= 1

3. 데이터가 추출되지 않아도 된다.

  • null 데이터를 추출해도 SQL의 수행에 영향을 미치지 않는다.
  • 만약 null 데이터를 임의의 다른 값으로 치환하고 싶은경우 NVL 함수를 사용한다.
select c1,c2,c3
    NVL((select null from scalar_t2 t2 where t2.c2 = t1.c2
    and ROWNUM <= 1),'ISNULL') as t2_c1
    from scalar_t1 t1
    where c2 = 'A'
    and ROWNUM <= 1

스칼라 서브쿼리를 조인으로 변경할 때, 반드시 조인 연결 컬럼이 중복 값을 가지지 않도록 해야하고, 조인은 Outer Join으로 수행해야한다.