# 다중 행 서브쿼리


하나 이상의 행을 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 개의 행이 선택되었습니다.


   

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다