SQL

서브쿼리(스칼라 서브쿼리, 인라인 뷰, 중첩 서브쿼리)

temporubato108 2024. 11. 17. 21:28

서브쿼리는 쿼리 안에 또 다른 쿼리를 포함한 구조를 말합니다. 이 서브쿼리를 스칼라 서브쿼리, 인라인 뷰, 중첩 서브쿼리로 구분하는 이유는, 각각의 서브쿼리가 실행되는 방식과 결과가 다르기 때문입니다.


1. 스칼라 서브쿼리 (Scalar Subquery)

  • 정의:
    • 하나의 값(단일 스칼라 값)을 반환하는 서브쿼리.
    • 주로 SELECT 목록이나 WHERE 절 등에서 단일 값이 필요한 곳에 사용됩니다.
  • 특징:
    • 서브쿼리 실행 결과가 항상 하나의 값이어야 합니다.
    • 결과가 여러 행이나 값이 없으면 오류가 발생하거나 NULL로 처리됩니다.

예시

SELECT EMPNO, ENAME, SAL,
       (SELECT AVG(SAL) FROM EMP) AS AVG_SAL
FROM EMP;
  • 설명:
    • (SELECT AVG(SAL) FROM EMP)스칼라 서브쿼리로, EMP 테이블의 급여 평균값을 반환.
    • 이 값은 SELECT 절에서 단일 값으로 사용됩니다.

2. 인라인 뷰 (Inline View)

  • 정의:
    • FROM 절에 사용되는 서브쿼리로, 결과가 임시 테이블(뷰)처럼 동작.
    • 주로 복잡한 데이터를 단순화하거나, 계산된 결과를 중간 테이블처럼 활용할 때 사용됩니다.
  • 특징:
    • 서브쿼리의 결과는 마치 테이블처럼 간주됩니다.
    • 여러 행과 열을 반환할 수 있습니다.

예시

SELECT DEPTNO, AVG_SAL
FROM (
    SELECT DEPTNO, AVG(SAL) AS AVG_SAL
    FROM EMP
    GROUP BY DEPTNO
) DEPT_AVG
WHERE AVG_SAL > 3000;
  • 설명:
    • 서브쿼리 (SELECT DEPTNO, AVG(SAL) AS AVG_SAL ... GROUP BY DEPTNO)인라인 뷰로 사용.
    • 이 뷰는 임시 테이블처럼 간주되어, 그 결과에서 평균 급여가 3000 이상인 부서를 조회합니다.

3. 중첩 서브쿼리 (Nested Subquery)

  • 정의:
    • WHERE 절이나 HAVING 절에서 중첩된 형태로 조건을 충족시키기 위해 사용되는 서브쿼리.
    • 주로 외부 쿼리와 조건적 관계를 형성하며, 종속적일 수도 있습니다.
  • 특징:
    • 서브쿼리가 외부 쿼리의 각 행에 대해 실행될 수도 있음(상관 서브쿼리).
    • 결과가 하나의 값, 여러 행, 여러 열을 반환할 수 있습니다.

예시: 단순 중첩 서브쿼리

SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE DEPTNO IN (
    SELECT DEPTNO
    FROM DEPT
    WHERE LOC = 'NEW YORK'
);
  • 설명:
    • 서브쿼리 (SELECT DEPTNO FROM DEPT WHERE LOC = 'NEW YORK')중첩 서브쿼리로 사용.
    • 이 서브쿼리의 결과(NEW YORK에 위치한 부서 번호)를 조건으로 사용하여 해당 부서의 직원을 조회합니다.

예시: 상관 서브쿼리

SELECT EMPNO, ENAME, SAL
FROM EMP E1
WHERE SAL > (
    SELECT AVG(SAL)
    FROM EMP E2
    WHERE E1.DEPTNO = E2.DEPTNO
);
  • 설명:
    • 내부 서브쿼리 (SELECT AVG(SAL) FROM EMP E2 WHERE E1.DEPTNO = E2.DEPTNO)는 외부 쿼리의 DEPTNO 값을 참조.
    • 외부 쿼리의 각 행에 대해 서브쿼리가 실행됩니다.

서브쿼리의 구분 이유

  1. 실행 방식:
    • 스칼라 서브쿼리는 단일 값을 반환.
    • 인라인 뷰는 결과를 임시 테이블처럼 반환.
    • 중첩 서브쿼리는 조건으로 사용되며, 종속적일 수도 있음.
  2. 사용 위치와 목적:
    • 스칼라 서브쿼리: SELECT, WHERE, HAVING 등에서 단일 값 계산.
    • 인라인 뷰: 복잡한 데이터를 단순화하고 중간 결과를 테이블처럼 활용.
    • 중첩 서브쿼리: 조건문에서 동적이거나 복잡한 조건을 처리.
  3. 결과 형태:
    • 스칼라 서브쿼리: 단일 값.
    • 인라인 뷰: 여러 행과 열.
    • 중첩 서브쿼리: 단일 값, 여러 행, 또는 열.

정리

종류 위치 결과 주요 사용 목적
스칼라 서브쿼리 SELECT, WHERE 등 단일 값 하나의 값을 계산해 조건이나 결과로 사용.
인라인 뷰 FROM 절 여러 행과 열 복잡한 데이터를 중간 결과 테이블처럼 활용.
중첩 서브쿼리 WHERE, HAVING 등 단일 값 또는 여러 행 외부 쿼리와 상호작용하며 조건 처리.

 

'SQL' 카테고리의 다른 글

절차적언어와 비절차적언어  (0) 2024.11.16
MOD함수와 %  (1) 2024.11.15