
✅ 서브쿼리 기본 개념
- 정의: 서브쿼리는 괄호 ( ) 안에 들어가는 하위 SELECT 문입니다.
- 역할: 메인 쿼리(바깥 쿼리)에 필요한 값을 제공하거나 조건을 만들어줍니다.
- 종류:
- 단일 행 서브쿼리 (Single-row subquery)
- 다중 행 서브쿼리 (Multi-row subquery)
- 다중 열 서브쿼리 (Multi-column subquery)
- 인라인 뷰 (Inline View)
- 스칼라 서브쿼리 (Scalar subquery)
📘 예제와 함께 보기
1. 단일 행 서브쿼리
-- 급여가 전체 평균보다 높은 사원 조회
SELECT EMP_NAME, SALARY
FROM EMP
WHERE SALARY > (SELECT AVG(SALARY) FROM EMP);
🔹 서브쿼리가 평균 급여 하나만 반환 → 단일 행
2. 다중 행 서브쿼리
-- SALES 부서와 같은 부서의 사원들 조회
SELECT EMP_NAME, DEPT_ID
FROM EMP
WHERE DEPT_ID IN (SELECT DEPT_ID FROM DEPT WHERE DEPT_NAME = 'SALES');
🔹 서브쿼리가 여러 개의 부서 ID를 반환할 수 있음 → 다중 행
3. 다중 열 서브쿼리
-- 사원 번호와 부서가 일치하는 사원 조회
SELECT *
FROM EMP
WHERE (EMP_ID, DEPT_ID) IN (SELECT EMP_ID, DEPT_ID FROM WORK_HISTORY);
🔹 서브쿼리가 (EMP_ID, DEPT_ID) 쌍으로 여러 행 반환
4. 인라인 뷰
-- 급여 높은 순으로 상위 5명 조회
SELECT *
FROM (SELECT * FROM EMP ORDER BY SALARY DESC)
WHERE ROWNUM <= 5;
🔹 서브쿼리가 테이블처럼 사용됨 → 인라인 뷰
5. 스칼라 서브쿼리
-- 각 사원의 부서명을 함께 출력
SELECT EMP_NAME,
(SELECT DEPT_NAME FROM DEPT WHERE DEPT.DEPT_ID = EMP.DEPT_ID) AS 부서명
FROM EMP;
🔹 한 행당 하나의 값만 반환됨 → 스칼라 서브쿼리
⚠️ 주의사항
| 구분 | 주의점 |
| 단일 행 | =, >, < 등 단일 비교 연산자 사용 |
| 다중 행 | IN, ANY, ALL, EXISTS 등의 연산자 필요 |
| 서브쿼리 결과가 NULL일 수 있음 | 결과가 없으면 조건 자체가 False 처리될 수 있음 |
'대덕인재 > Oracle' 카테고리의 다른 글
| [Oracle D-15] 집합연산자(Set Operators) (0) | 2025.04.21 |
|---|---|
| [Oracle D-12] ANSI JOIN (0) | 2025.04.19 |
| [Oracle D-13] 외부조인(Outer join) (0) | 2025.04.17 |
| [Oracle D-12] 내부조인(Inner Join),외부조인(Outer Join), ANSI join (0) | 2025.04.17 |
| [Oracle D-11] 출력순서 (0) | 2025.04.15 |