-- 기본 구문
SELECT column_name
FROM table_name
WHERE column_name operator (SELECT column_name FROM table_name WHERE condition);
-- 예: SCOTT의 급여보다 많이 받는 사원
SELECT empno, ename, sal
FROM emp
WHERE sal > (SELECT sal FROM emp WHERE ename = 'SCOTT');
-- 최고 급여 받는 사원
SELECT empno, ename, sal
FROM emp
WHERE sal = (SELECT MAX(sal) FROM emp);
-- 부서별 최고 급여 받는 사원
SELECT empno, ename, deptno, sal
FROM emp
WHERE (deptno, sal) IN (
SELECT deptno, MAX(sal)
FROM emp
GROUP BY deptno
);
-- column < ANY (subquery): 최대값보다 작은 값
-- column > ANY (subquery): 최소값보다 큰 값
-- 예: 어떤 부서의 최저 급여보다 높은 급여
SELECT empno, ename, sal
FROM emp
WHERE sal > ANY (
SELECT MIN(sal)
FROM emp
GROUP BY deptno
);
-- column < ALL (subquery): 최소값보다 작은 값
-- column > ALL (subquery): 최대값보다 큰 값
-- 예: 모든 부서의 최고 급여보다 작은 급여
SELECT empno, ename, sal
FROM emp
WHERE sal < ALL (
SELECT MAX(sal)
FROM emp
GROUP BY deptno
);
-- MILLER보다 늦게 입사한 사원
SELECT employee_id, name, hire_date
FROM employees
WHERE hire_date > (
SELECT hire_date
FROM employees
WHERE name = 'MILLER'
);
-- 매니저 평균 급여보다 적은 급여
SELECT *
FROM employees
WHERE salary < (
SELECT AVG(salary)
FROM employees
WHERE job_id = 'MANAGER'
);
WHERE 절에서 서브쿼리 사용 시
실행 계획 고려