FROM절 서브 쿼리
 - 서브 쿼리는 FROM절에서도 사용 가능하다.
 - 해당 SELECT문에서만 사용 가능한 데이터를 정의한다.
 - FROM절에 기술한 서브 쿼리는 마치 뷰와 같은 역할을 한다.
 - FROM절에 있는 서브 쿼리는 인라인뷰 라고도 한다.

 - ex)

1
2
3
4
5
6
7
SELECT 
    ename,
    sal
FROM (SELECT ename,sal
      FROM emp
      ORDER BY sal DESC)
WHERE rownum < 6;
 

 

 

 스칼라 서브 쿼리
 - 서브 쿼리 수행 결과가 한 개 ROW와 한 개 컬럼만을 반환하는 경우
 - 반환 값이 단일 값이 되는 서브 쿼리이다.
 - 단일 값을 사용할 수 있는 모든 곳에 사용이 가능하다.
 - SELECT, ORDER BY 위치에는 스칼라 서브쿼리만 사용이 가능하다

 - ex)

1
2
3
4
5
6
7
8
9
SELECT
    ename,
    sal,
    deptno,
    (SELECT
        dname
     FROM dept
     WHERE deptno = 20) RESULT
FROM emp;
 

 

 

 상호 연관 서브 쿼리
 - 메인 쿼리의 한 ROW에 대해서 서브 쿼리가 한 번씩 실행된다.
 - 테이블에서 행을 먼저 읽고 각 ROW의 값을 서브 쿼리 실행 시 이용한다.
 - 기본 질의에서 고려된 각 후보 행에 대해 서브쿼리가 다른 결과를 반환해야 하는 경우에 사용된다.
 - 서브 쿼리에서 메인 쿼리의 컬럼명을 사용할 수 있으나 메인 쿼리에서는 서브 쿼리의 컬럼명을 사용할 수 없다.

 - ex) 

1
2
3
4
5
6
7
8
9
SELECT
    ename,
    sal,
    deptno,
    (SELECT
        dname
     FROM dept
     WHERE deptno = E.DEPTNO) RESULT
FROM emp E;
 

 

 

 EXISTS
 - 메인 쿼리에서 검색된 값이 서브 쿼리의 결과 집합에 존재하는지 여부를 검사하기 위한 상호 연관 서브 쿼리에 자주 사용된다.
 - 서브 쿼리가 하나의 행 이상 반환하면 True를 반환하고 해당 값이 없으면 False를 반환한다.

 - ex) 부서원이 있는 부서의 번호, 부서 이름 조회

1
2
3
4
5
6
7
SELECT 
    deptno,
    dname
FROM dept D
WHERE EXISTS (SELECT 1
              FROM emp
              WHERE deptno = D.DEPTNO);
 

 

 

 

 오늘의 한 줄 : SELECT는 거의 다 쓰네?


 

 

 

 

 출처 : SK 동반성장 아카데미, 비전공자를 위한 SQL 입문, 「인라인뷰와 스칼라 서브쿼리」

+ Recent posts