서브쿼리
f
firststep 에디터
IT / 자격증 전문 라이터
2026년 2월 24일861
서브쿼리
A. 서브쿼리 요약 (핵심 개념 + 연관 서브쿼리)
1) 서브쿼리(Subquery) 한 줄 정의
- 쿼리 안에 들어가는 또 다른 쿼리입니다.
- “먼저 작은 쿼리로 기준/목록/값을 만들고 → 메인쿼리가 그걸 이용해 조회/수정”하는 구조입니다.
2) 연관 서브쿼리(Correlated Subquery)란?
이미지 핵심:
- 메인쿼리의 ‘각 행(row)’마다 서브쿼리가 다시 실행됩니다.
- 서브쿼리가 메인쿼리의 컬럼을 참조합니다. (예: E1.DEPTNO를 서브쿼리에서 사용)
- 그래서 일반(비연관) 서브쿼리보다 느릴 수 있음(행마다 반복 실행되기 때문).
3) 연관 서브쿼리 예시 1: “자기 부서 평균보다 급여가 높은 직원”
의미:
- 직원 한 명(E1)을 기준으로,
- “E1이 속한 부서의 평균 급여”를 다시 계산해서,
- E1의 급여가 그 평균보다 큰지 비교합니다.
예시 SQL(교재 흐름 그대로):
SELECT ENAME, SAL, DEPTNO
FROM EMP E1
WHERE SAL > (
SELECT AVG(SAL)
FROM EMP E2
WHERE E1.DEPTNO = E2.DEPTNO
);
쉽게 말하면
- “각 직원이 속한 반의 평균 점수”를 구해서,
- “내 점수가 우리 반 평균보다 높냐?”를 보는 것과 같습니다.
4) 연관 서브쿼리 예시 2: “각 부서에서 가장 최근에 고용된 직원”
의미:
- 직원 한 명(E1)을 기준으로,
- “E1 부서에서 가장 최근 입사일(MAX(HIREDATE))”을 찾아서,
- 그 날짜와 E1의 입사일이 같으면 뽑습니다.
예시 SQL:
SELECT ENAME, HIREDATE, DEPTNO
FROM EMP E1
WHERE HIREDATE = (
SELECT MAX(HIREDATE)
FROM EMP E2
WHERE E1.DEPTNO = E2.DEPTNO
);
결과 느낌
- 부서 10 → 그 부서에서 가장 최근 입사한 1명
- 부서 20 → 그 부서에서 가장 최근 입사한 1명
- 부서 30 → 그 부서에서 가장 최근 입사한 1명
이런 식으로 “부서별 대표 1명”을 뽑는 패턴입니다.
5) 같은 문제를 다른 방식으로도 풀 수 있다
이미지에서도 “GROUP BY로 부서별 MAX(HIREDATE) 뽑을 수도 있다”는 흐름이 나옵니다.
예:
SELECT DEPTNO, MAX(HIREDATE)
FROM EMP
GROUP BY DEPTNO;
다만 이건 “부서별 최신 날짜”만 나오고, “직원 이름까지 같이” 보려면 조인/서브쿼리/윈도우 함수 등 추가가 필요합니다.
B. 뷰(View) 요약 (뷰 vs 테이블, Materialized View 포함)
1) 뷰(View)란?
- SELECT 결과를 ‘가상 테이블’처럼 저장해 두는 것입니다.
- 실제 데이터를 복사해 저장하는 게 아니라, **SELECT 문 자체(정의)**를 저장하는 개념에 가깝습니다.
예시(교재 흐름):
- “부서 위치(LOC)가 CHICAGO인 부서에 속한 직원 목록”을 자주 본다면,
매번 복잡한 조인을 치지 말고 뷰로 만들어 둡니다.
CREATE VIEW EMP_DEPT_VIEW AS
SELECT E.ENAME, E.JOB, D.DNAME, D.LOC
FROM EMP E
JOIN DEPT D ON E.DEPTNO = D.DEPTNO
WHERE D.LOC = 'CHICAGO';
이후에는:
SELECT * FROM EMP_DEPT_VIEW;
처럼 테이블 조회하듯 쓰면 됩니다.
2) 뷰를 쓰는 이유(장점)
이미지 핵심을 쉬운 말로 정리하면:
- 복잡한 쿼리 단순화: 조인/조건이 긴 쿼리를 이름으로 저장해 재사용
- 보안/권한 제어: 원본 테이블 전체를 주지 않고, 필요한 컬럼/행만 보여주기
- 일관성: 여러 사람이 같은 기준으로 조회(“정의가 한 곳에 있음”)
3) 뷰(View) vs 테이블(Table) 차이
- 테이블: 데이터 자체를 저장
- 뷰: “조회 정의(SELECT)”를 저장 → 조회할 때마다 원본에서 다시 읽어 계산
그래서 뷰는 보통:
- 저장공간 부담이 적고,
- 항상 최신 원본을 기준으로 결과가 나옴(원본이 바뀌면 뷰 결과도 바뀜)
4) Materialized View(머티리얼라이즈드 뷰)
이미지 핵심:
- 일반 뷰는 “정의만 저장”이라 조회할 때 계산 부담이 있을 수 있음
- Materialized View는 결과 데이터를 실제로 저장해둡니다(캐시처럼).
장점:
- 조회가 빠를 수 있음(이미 결과가 저장되어 있으니까)
단점:
- 원본이 바뀌어도 바로 반영되지 않을 수 있음 → “갱신(Refresh)” 개념이 필요
한 줄 비유
- View: “레시피만 적어둔 것(요리할 때마다 새로 만듦)”
- Materialized View: “미리 만들어 냉장고에 넣어둔 완성 요리(꺼내 먹기 빠름, 대신 신선도 관리 필요)”
정리(시험용 한 문장 요약)
- 서브쿼리: 쿼리 안의 쿼리로 “기준값/목록/조건”을 만들어 메인쿼리가 활용한다.
- 연관 서브쿼리: 메인쿼리의 각 행과 연결되어 행마다 서브쿼리가 반복 실행된다(부서 평균 비교, 부서별 최신 입사자 등).
- 뷰(View): SELECT 결과를 가상 테이블처럼 쓰는 재사용/보안/단순화 도구(정의 저장).
- Materialized View: 뷰 결과를 실제로 저장해 조회 성능을 높이지만 갱신 관리가 필요하다.
f
firststep 에디터 · IT / 자격증 전문 라이터
firststep.kr의 실무 에디터로서 무언가를 처음 도전하는 분들이 헤매지 않도록 검증된 지식과 실습 가이드를 작성합니다.
댓글 0개
댓글을 작성하려면 로그인이 필요합니다
간단한 이메일과 비밀번호로 3초 만에 가입하고 의견을 남겨보세요.
첫 번째 댓글을 남겨보세요!