1. 서브쿼리 (Subquery)란?
서브쿼리는 SQL문 안에 포함된 또 다른 SELECT 문이다.
쉽게 말하면 "쿼리 안에 들어가는 작은 쿼리"
SELECT *
FROM EMP
WHERE SAL > (SELECT AVG(SAL) FROM EMP);
- 메인쿼리: 전체 SELECT
- 서브쿼리: (SELECT AVG(SAL) FROM EMP)
2. 서브쿼리의 핵심 개념 (시험·실무 둘 다 중요)
핵심 정의
- 하나의 독립적인 SELECT문
- 괄호 ( ) 안에 작성
- 메인쿼리 안에서 값처럼 사용됨
- 결과를 메인쿼리에 전달하는 구조
함수처럼 결과값을 반환하는 SQL이라고 이해하면 가장 쉽다.
3. 메인쿼리 vs 서브쿼리 구조
SELECT E.EMPNO,
E.ENAME,
D.DEPTNO,
D.DNAME,
D.LOC
FROM EMP E,
(SELECT DEPTNO, DNAME, LOC
FROM DEPT) D
WHERE E.DEPTNO = D.DEPTNO;
구조 분석
| 구분 | 역할 |
| 메인쿼리 | EMP 테이블 조회 |
| 서브쿼리 | DEPT 테이블 결과를 임시 테이블처럼 생성 |
서브쿼리 결과 = 하나의 가상 테이블처럼 사용됨
4. 서브쿼리 종류 (위치 기준 3가지)
교재 기준 가장 중요한 분류이다.
① SELECT 절 서브쿼리
컬럼 위치에 들어가는 서브쿼리
SELECT ENAME,
(SELECT DNAME FROM DEPT D WHERE D.DEPTNO = E.DEPTNO) AS 부서명
FROM EMP E;
특징:
- 스칼라 서브쿼리라고도 부름
- 반드시 1개의 값만 반환해야 함
② FROM 절 서브쿼리 (인라인뷰)
가장 실무에서 많이 쓰는 유형.
SELECT *
FROM (SELECT * FROM EMP WHERE SAL > 2000) A;
특징:
- 가상의 테이블 생성
- 반드시 별칭 (A) 필요
- VIEW와 개념이 매우 유사
- 교재에서도 "동적 테이블"이라고 설명됨
③ WHERE 절 서브쿼리 (중첩 서브쿼리)
조건 필터링용 서브쿼리
SELECT ENAME, SAL
FROM EMP
WHERE SAL >= (SELECT AVG(SAL) FROM EMP);
특징:
- 조건 비교용
- 가장 기본적인 서브쿼리 형태
- 시험 단골 유형
5. 인라인 뷰 (Inline View) 완전 이해
개념
FROM 절에 들어가는 서브쿼리 → 실행 시 임시 테이블처럼 동작
SELECT *
FROM (SELECT EMPNO, ENAME FROM EMP) V;
교재 핵심 설명:
- 동적으로 생성되는 테이블
- 메모리에 임시로 생성됨
- 일부만 가져와 사용 가능
6. 중첩 서브쿼리 (Nested Subquery)
WHERE, HAVING 등에 들어가는 서브쿼리
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE SAL >= (SELECT AVG(SAL) FROM EMP);
해석 흐름:
- 서브쿼리 먼저 실행 (평균 급여 계산)
- 메인쿼리 실행
- 평균 이상 직원 조회
실행 순서가 매우 중요하다.
7. 단일행 vs 다중행 서브쿼리 (시험 핵심)
① 단일행 서브쿼리 (Single Row)
결과가 1개 행만 반환
사용 연산자: =, <, >, <=, >=
SELECT *
FROM EMP
WHERE SAL > (SELECT AVG(SAL) FROM EMP);
② 다중행 서브쿼리 (Multiple Row)
결과가 여러 행 반환 → 전용 연산자 사용해야 함
| 연산자 | 의미 |
| IN | 여러 값 중 포함 |
| ANY | 하나라도 만족 |
| ALL | 모두 만족 |
| EXISTS | 존재 여부 확인 |
예제 (교재 유형)
SELECT EMPNO, ENAME
FROM EMP
WHERE DEPTNO IN (
SELECT DISTINCT DEPTNO
FROM EMP
WHERE SAL <= 1000
);
8. 상관 서브쿼리 (Correlated Subquery)
개념
메인쿼리의 값을 참조하는 서브쿼리
SELECT E.EMPNO, E.ENAME, E.JOB, E.SAL
FROM EMP E
WHERE (JOB, SAL) IN (
SELECT JOB, MAX(SAL)
FROM EMP
GROUP BY JOB
);
특징:
- 메인쿼리와 연관성 있음
- 한 행마다 서브쿼리가 반복 실행됨
- 성능 비용이 큼 (실무 중요)
9. 서브쿼리 실행 순서 (진짜 중요)
기본 원칙: 서브쿼리 → 메인쿼리 순서로 실행
실행 흐름:
- 서브쿼리 실행
- 결과 반환
- 메인쿼리 조건 적용
- 최종 결과 출력
10. VIEW(View)와 서브쿼리 관계
교재 마지막 핵심 개념이다.
VIEW란?
서브쿼리를 저장해 둔 가상 테이블
CREATE OR REPLACE VIEW V_EMP AS
SELECT E.EMPNO,
E.ENAME,
SAL,
E.DEPTNO,
D.DNAME,
D.LOC
FROM EMP E
LEFT OUTER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO;
특징:
- 실제 데이터 저장 X
- 쿼리 결과만 저장
- 보안 및 재사용에 유리
11. 테이블 vs 뷰 차이 (시험 자주 나옴)
| 구분 | 테이블 | 뷰 |
| 데이터 저장 | 실제 저장 | 저장 안함 |
| 생성 방식 | 물리적 생성 | 쿼리 기반 |
| 수정/삭제 | 자유로움 | 제한적 |
| 독립성 | 완전 독립 | 원본 테이블 의존 |
12. View 관련 시험 문제 해설
문제: View에 대한 설명으로 옳지 않은 것은?
선지 분석:
- ① 테이블처럼 조회 가능 → 맞음
- ② 동적으로 생성됨 → 맞음
- ③ 삽입 / 수정 / 삭제 자유롭다 → 틀림
- ④ 자체 인덱스 생성 불가 → 맞음
정답: ③
이유: View는 조인, GROUP BY, UNION 포함 시 DML (INSERT / UPDATE / DELETE)이 제한됨
13. 실무에서 서브쿼리 vs JOIN 선택 기준
서브쿼리 사용이 좋은 경우
- 조건 비교 (AVG, MAX 등)
- 가독성 중요할 때
- 단일 값 조회
JOIN이 더 좋은 경우
- 대용량 데이터
- 성능 최적화 필요
- 다중 테이블 조회
실무 핵심: 성능은 JOIN이 대부분 더 빠름
14. 실무 핵심 요약 (면접 / 프로젝트용)
- 서브쿼리는 SQL 안의 SELECT문이다
- FROM절 → 인라인뷰 (가상 테이블)
- WHERE절 → 조건 필터링
- 단일행 vs 다중행 반드시 구분
- IN / ANY / ALL / EXISTS 사용법 중요
- 상관 서브쿼리는 성능 비용 큼
- VIEW는 저장된 서브쿼리 개념
서브쿼리는 메인쿼리 내부에서 값을 반환하는 독립적인 SELECT문이며 위치에 따라 SELECT / WHERE / FROM 서브쿼리로 구분되고 결과 행 개수에 따라 단일행과 다중행 서브쿼리로 나뉜다.
'SQLD 시험 대비' 카테고리의 다른 글
| SQLD 고급 그룹함수 (0) | 2026.02.27 |
|---|---|
| SQLD 집합연산자 (0) | 2026.02.27 |
| SQLD 표준 조인 (0) | 2026.02.25 |
| SQLD 조인 (0) | 2026.02.23 |
| SQLD ORDER BY 정리 (0) | 2026.02.22 |