Computer/Database

[SQL] 서브쿼리

SenJ 2021. 11. 18. 16:48

서브쿼리란 하나의 SQL 문장 내부에 존재하는 또 다른 SELECT문장을 의미한다. 서브쿼리의 위치에 따라 명칭을 달리한다.

SELECT COL1,
       COL2,
       (SELECT SCALA_COL FROM SUB_TABLE) //스칼라 서브 쿼리
FROM TABLE1 A,
      (SELECT INLINE_COL FROM TABLE2) B //인라인 뷰
WHERE A.COL1=B.INLINE_COL
AND A.COL2 IN (SELECT SUB_COL FROM TABLE3) //서브쿼리

 

각 서브쿼리의 특징을 간략히 정리하면 아래와 같다.

스칼라서브쿼리 : SELECT절에서 사용, 단일 행 반환

인라인뷰 : FROM 절에서 사용, SQL문 실행시 생성 종료시 사라짐 ( VIEW와는 조금 다름 ), 여러 테이블에 존재하는 컬럼을 하나로 모아서 사용가능

 

서브쿼리 : WHERE 절에서 사용, 다중 행/열 반환 가능, 조건절에서 = , > , < , IN , NOT IT , ANY(반환값 중 한가지 값보다 크거나 작음) , ALL (반환값의 전체보다 크거나 작음 ), 다중컬럼을 반환하는 경우 비교하는 컬럼도 같은 갯수의 컬럼으로 비교해야함.

상호연관 서브쿼리(Correlated subquery)

메인쿼리 데이터와 연관성이 존재하는 서브쿼리, 메인쿼리의 테이블의 컬럼을 사용하여 서브쿼리의 조건으로 사용

SELECT ENAME, DEPTNO, SAL
FROM EMP E1
WHERE SAL > (SELECT AVG(SAL) FROM EMP E2 WHERE E1.DEPTNO=E2.DEPTNO)
 

서브쿼리는 쿼리성능에 상당부분 영향을 끼치기 때문에 사용에 유의할 필요가 있다.