다중행 서브 쿼리 비교 연산자 종류

- IN 

: 메인 쿼리의 비교 조건이 서브쿼리의 결과중에서 하나라도 일치하면 참

//부서별로 최소급여를 받는 사원의 정보 출력
select ename, sal, deptno from emp
where sal in (select min(sal) from emp group by deptno);

ENAME             SAL     DEPTNO
---------- ---------- ----------
SMITH             800         20
JAMES             950         30
MILLER           1300         10

 

- ANY

: 메인 쿼리의 비교 조건이 서브쿼리의 결과중에서 하나라도 일치하면 참

sal > any(10,20,30) : 10보다 큰 데이터 or 20보다 큰 데이터 or 30보다 큰 데이터 출력

==> 즉 최소값인 10보다 큰 데이터 모두 출력(sal 내림차순 정렬)

sal < any(10,20,30) : 10보다 작은 데이터 or 20보다 작은 데이터 or 30보다 작은 데이터 출력

==> 즉 최대값인 30보다 작은 데이터 모두 출력(sal 오름차순 정렬)

* 30번 부서의 최소급여를 받는 사원보다 많은 급여를 받는 사원 정보(30번 부서 제외) *
//단일행 서브쿼리 방식(자동 정렬 안됨)
select ename,sal,deptno from emp 
where sal > (select min(sal) from emp where deptno=30)
and deptno<>30;

ENAME             SAL     DEPTNO
---------- ---------- ----------
JONES            2975         20
CLARK            2450         10
            ...
MILLER           1300         10
_____________

//any 사용하여 다중행 서브쿼리(자동 sal 내림차순 정렬됨)
select ename,sal,deptno from emp
where sal > any(select sal from emp where deptno=30)
and deptno<>30;

ENAME             SAL     DEPTNO
---------- ---------- ----------
KING             5000         10
SCOTT            3000         20
             ...
ADAMS            1100         20

 

- SOME

: any와 같음

: 메인 쿼리의 비교 조건이 서브쿼리의 결과중에서 하나라도 일치하면 참

select ename,sal,deptno from emp
where sal > some(select sal from emp where deptno=30)
and deptno<>30;

ENAME             SAL     DEPTNO
---------- ---------- ----------
KING             5000         10
SCOTT            3000         20
             ...
ADAMS            1100         20

 

- ALL

: 메인 쿼리의 비교 조건이 서브쿼리의 결과중에서 모든값이 일치하면 참

SQL> select ename,sal,deptno from emp
  2  where sal > all(select sal from emp where deptno=30)
  3  and deptno<>30;

ENAME             SAL     DEPTNO
---------- ---------- ----------
JONES            2975         20
SCOTT            3000         20
FORD             3000         20
KING             5000         10

SQL> select max(sal) from emp where deptno=30;

  MAX(SAL)
----------
      2850

 

- EXISTS

: 메인 쿼리의 비교 조건이 서브쿼리의 결과중에서 만족하는 값이 하나라도 존재하면 참

//직속부하가 있는 모든 사원의 정보 출력
select empno,ename from emp e
where exists(select * from emp 
where e.empno=mgr);

 

 


 

예제) 

1) EMP, DEPT테이블을 이용하여 다음과 같은 결과를 출력시켜주는 SQL구문을 작성(조인,서브쿼리 사용)

ENAME         DNAME         DEPTNO                                            
---------- -------------- ----------                                            
            OPERATIONS        40

 

//Ansi join + sub query
select e.ename, d.dname, deptno
from emp e right outer join (select dname, deptno from dept where deptno=40) d
using (deptno)
where deptno=40;

 

2) ALLEN과 같은 부서에 근무하는 사원들의 정보를 출력 시켜주는 SQL구문을 작성

select ename from emp where deptno=(select deptno from emp where ename='ALLEN');

 

+ Recent posts