다중행 서브 쿼리 비교 연산자 종류
- 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');
'DB(ORACLE)' 카테고리의 다른 글
트랜잭션 인덱스 시퀀스 (0) | 2021.06.15 |
---|---|
[Oracle]오라클 서브쿼리, 조건문 그룹함수 사용 (0) | 2021.06.12 |
[Oracle]오라클 조인, outer join, self join, ansi join (0) | 2021.06.10 |
[Oracle]오라클 조인개념, cross join, inner join (0) | 2021.06.08 |
[Oracle]데이터 타입, varchar2 char 차이점, 자료형 변경 (0) | 2021.05.31 |