# 다중 행 서브쿼리
하나 이상의 행을 RETURN하는 SUBQUERY를 다중 행 SUBQUERY라고 합니다.
복수 행 연산자(IN, NOT IN, ANY, ALL, EXISTS)를 사용 할 수 있습니다.
# 예제
IN 연산자 사용 예제
예제)부서별로 가장 급여를 많이 받는 사원의
정보를 출력하는 예제 입니다.
SQL>SELECT empno,ename,sal,deptno
FROM emp
WHERE sal IN (SELECT MAX(sal)
FROM emp
GROUP BY deptno);
EMPNO ENAME SAL DEPTNO
———- ———- ———- ———-
7698 BLAKE 2850 30
7788 SCOTT 3000 20
7902 FORD 3000 20
7839 KING 5000 10
ANY 연산자 사용 에제
– ANY연산자는 서브쿼리의 결과값중 어느 하나의 값이라도
만족이 되면 결과값을 반환 합니다.
SQL>SELECT ename, sal
FROM emp
WHERE deptno != 20
AND sal > ANY(SELECT sal
FROM emp
WHERE job=’SALESMAN’);
ENAME SAL
———- ———-
ALLEN 1600
BLAKE 2850
CLARK 2450
KING 5000
TURNER 1500
MILLER 1300
6 개의 행이 선택되었습니다.
ALL 연산자 사용 예제
– ALL연산자는 서브쿼리의 결과값중 모든 결과 값이
만족 되야만 결과값을 반환 합니다.
SQL>SELECT ename, sal
FROM emp
WHERE deptno != 20
AND sal > ALL(SELECT sal
FROM emp
WHERE job=’SALESMAN’);
ENAME SAL
———- ———-
BLAKE 2850
CLARK 2450
KING 5000
3 개의 행이 선택되었습니다.
EXISTS 연산자 사용 예제
– EXISTS 연산자를 사용하면 서브쿼리의 데이터가 존재하는가의
여부를 먼저 따져 존재하는 값들만을 결과로 반환해 줍니다.
– SUBQUERY에서 적어도 1개의 행을 RETURN하면 논리식은 참이고
그렇지 않으면 거짓 입니다.
예제)사원을 관리할 수 있는 사원의 정보를 보여 줍니다.
SELECT empno, ename, sal
FROM emp e
WHERE EXISTS (SELECT empno
FROM emp
WHERE e.empno = mgr)
EMPNO ENAME SAL
———- ———- ———-
7566 JONES 2975
7698 BLAKE 2850
7782 CLARK 2450
7788 SCOTT 3000
7839 KING 5000
7902 FORD 3000
6 개의 행이 선택되었습니다.