SQL 명령에 포함되어 실행되는 SELECT 명령
여러 번의 SQL 명령으로 얻을 수 있는 결과를 하나의 SQL 명령으로 얻기 위해 사용하는 기능이다.
조건식의 비교대상과 같은 자료형의 값이 하나만 검색되도록 서브쿼리 작성해야 한다.
단일행(SINGLE ROW)의 단일 컬럼값(SINGLE COLUMN) 검색을 할 수 있다.
SELECT EMPNO,ENAME,SAL FROM EMP
WHERE SAL>=(SELECT SAL FROM EMP WHERE ENAME='SCOTT');
서브쿼리의 검색 결과값이 다중행(MULTI-ROW SUBQUERY)인 경우 = 연산자를 사용하여 비교하면 에러가 발생한다.
SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP
WHERE SAL IN(SELECT MIN(SAL) FROM EMP GROUP BY DEPTNO);
--EMP 테이블에서 부서번호가 20인 부서에 근무하는 모든 사원보다 급여가 많은 사원의
--사원번호,사원이름,급여,부서번호 검색
SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP
WHERE SAL>ALL(SELECT SAL FROM EMP WHERE DEPTNO=20);
SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP
WHERE SAL<(SELECT MIN(SAL) FROM EMP WHERE DEPTNO=10);
--EMP 테이블에서 부서번호가 10인 부서에 근무하는 어떤 사원보다 급여가 적은 사원의
--사원번호,사원이름,급여,부서번호 검색하기
SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP
WHERE SAL<(SELECT MAX(SAL) FROM EMP WHERE DEPTNO=10) AND DEPTNO<>10;
--EMP 테이블에서 부서번호가 20인 부서에 근무하는 모든 사원보다 급여가 많은 사원의
--사원번호,사원이름,급여,부서번호 검색하기
SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP
WHERE SAL>(SELECT MAX(SAL) FROM EMP WHERE DEPTNO=20);
--EMP 테이블에서 부서번호가 20인 부서에 근무하는 어떤 사원보다 급여가 많은 사원의
--사원번호,사원이름,급여,부서번호 검색하기
SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP
WHERE SAL>(SELECT MIN(SAL) FROM EMP WHERE DEPTNO=20) AND DEPTNO<>20;
SELECT EMPNO,ENAME,MGR,JOB,SAL FROM EMP
WHERE (MGR,JOB)=(SELECT MGR,JOB FROM EMP WHERE ENAME='ALLEN') AND ENAME<>'ALLEN';