SubQuery 중첩 쿼리 

(1) 다른 query문에 포함된 query문

scott의 급여보다 더 많이 받는 직원의 이름 업무 급여를 조회

select sal from emp where ename='SCOTT';

select ename, sal from emp where sal>(select sal from emp where ename='SCOTT');

(2) 반드시 ()를 사용가능

(3) 연산자의 오른쪽에서 사용가능

(4) order by 사용 불가

(5) 결과값에 따른 유형

1) 단일행

2) 다중행

3) 다중열

(6) 연산자

1) 단일행

>, <, >=, <=, =, != ...

2) 다중행

in , any, all, exists not, ...

any 는 or의 뜻 하나만 만족

all 은 and의 뜻 모두 만족

(7) 종류

1) 연관 서브쿼리

2) 비연관 서브쿼리

문제 

/*사번이 7521의 업무와 같고 급여가 7934보다 많은 직원의 사번, 이름, 업무, 급여*/

/*서브쿼리 안썼을경우*/

select empno, ename, sal,job from emp;

select empno, ename, sal , job from emp where job='SALESMAN' and sal>1300;

/*서브쿼리 쓸때*/

select empno, ename, sal, job from emp where job=(select job from emp where empno=7521) and sal>(select sal from emp where empno=7934);

/*업무별로 최소 급여를 받는 직원의 사번, 이름, 업무, 급여, 부서번호 조회*/

select min(sal) from emp group by job;

select empno, ename, job, sal FROM EMP WHERE sal = 800 or sal = 1250 or sal = 5000 or sal 2450 or sal 3000;

select empno, ename, job, sal, deptno  from emp where sal in(select min(sal) from emp group by job);

/*업무별로 최소 급여보다 많은 급여를 받는 직원의 사번, 이름, 업무, 급여 , 부서번호 조회*/

select empno, ename, job, sal, deptno  from emp where sal > any(select min(sal) from emp group by job);

/*업무별로 최대 급여 이상 급여를 받는 직원의 사번, 이름, 업무, 급여, 부서번호 조회*/

select max(sal) from emp group by job;

select empno, ename, job, sal, deptno from emp where sal>= all(select max(sal) from emp group by job);

/*적어도 한명의 직원으로부터 보고를받을 수 있는 직원의 이름, 업무, 입사일자, 급여를 조회*/

select empno, ename, job, hiredate, sal from emp e where exists(select * from emp where e.empno=mgr);

다중열

/*사번이 7934인 직원의 급여를 1500으로 수정 보너스를 300으로 수정*/

update emp set sal=1500, comm=300 where empno=7934;

update emp set sal=1300, comm=null where empno=7934;

select sal, comm from emp where empno=7934;

/*급여와 보너스가 30번 부서에 있는 직원의 급여와 보너스가 같은 직원에 대해 사번, 이름, 부서번호, 급여, 보너스를 조회*/

select empno, ename, deptno, sal, comm from emp where (sal,comm) in(select sal,comm  from emp where deptno=30);

'DB > Oracle' 카테고리의 다른 글

[Oracle 과제] Join에 대한 문제  (0) 2017.06.26
[Oracle] Join  (0) 2017.06.26
[Oracle 과제] select 문제 / SubQuery 문제  (0) 2017.06.26
[Oracle] DML(Data Manipulation Language)  (0) 2017.06.26
[Oracle] Function 함수들..  (0) 2017.06.26

+ Recent posts