서브쿼리는 쿼리 안에 또 다른 쿼리를 포함한 구조를 말합니다. 이 서브쿼리를 스칼라 서브쿼리, 인라인 뷰, 중첩 서브쿼리로 구분하는 이유는, 각각의 서브쿼리가 실행되는 방식과 결과가 다르기 때문입니다.
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
값을 참조. - 외부 쿼리의 각 행에 대해 서브쿼리가 실행됩니다.
- 내부 서브쿼리
서브쿼리의 구분 이유
- 실행 방식:
- 스칼라 서브쿼리는 단일 값을 반환.
- 인라인 뷰는 결과를 임시 테이블처럼 반환.
- 중첩 서브쿼리는 조건으로 사용되며, 종속적일 수도 있음.
- 사용 위치와 목적:
- 스칼라 서브쿼리: SELECT, WHERE, HAVING 등에서 단일 값 계산.
- 인라인 뷰: 복잡한 데이터를 단순화하고 중간 결과를 테이블처럼 활용.
- 중첩 서브쿼리: 조건문에서 동적이거나 복잡한 조건을 처리.
- 결과 형태:
- 스칼라 서브쿼리: 단일 값.
- 인라인 뷰: 여러 행과 열.
- 중첩 서브쿼리: 단일 값, 여러 행, 또는 열.
정리
종류 | 위치 | 결과 | 주요 사용 목적 |
---|---|---|---|
스칼라 서브쿼리 | SELECT, WHERE 등 | 단일 값 | 하나의 값을 계산해 조건이나 결과로 사용. |
인라인 뷰 | FROM 절 | 여러 행과 열 | 복잡한 데이터를 중간 결과 테이블처럼 활용. |
중첩 서브쿼리 | WHERE, HAVING 등 | 단일 값 또는 여러 행 | 외부 쿼리와 상호작용하며 조건 처리. |
'SQL' 카테고리의 다른 글
절차적언어와 비절차적언어 (0) | 2024.11.16 |
---|---|
MOD함수와 % (1) | 2024.11.15 |