[DB] Sub Query

● Sub Query

1) 다른 Query문에 포함됨 Query

2) 반드시 ( ) 를 사용

3) 연산자의 오른쪽에 와야 한다

4) order by 사용 불가

5) 종류

- Subquery

- 상관 Subquery : 서브쿼리로만 실행했을때 실행이 안되고 바깥의 쿼리가 있어야 

      실행가능, 성능차이 때문에 많이 쓰이지 않음

6) 유형

- 단일행 : 서브쿼리의 결과값이 하나일때 사용

- 다중행 : 서브쿼리의 결과값이 여러개일때 사용

- 다중열

7) 연산자 

- 단일행

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

- 다중행

in, any, all, exists, not


▶ Sub Query TEST


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

select sal from emp where ename='SCOTT';

select ename, job, sal from emp where sal>3000;


Sub Query 사용↓

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



2) 사번이 7521의 업무와 같고, 급여가 7934보다 많은 직원의 사번, 이름, 업무, 급여 조회

select job from emp where empno=7521; -- SALESMAN

select sal from emp where empno=7934;  -- 1300

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


Sub Query 사용↓

select empno, ename, job, sal from emp

where job=(select job from emp where empno=7521)

and sal>(select sal from emp where empno=7934);



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

select min(sal) from emp group by job;

select empno, ename, sal, deptno from emp 

where sal=800 or sal=1250 or sal=5000 or sal=2450 or sal=3000;

select empno, ename, sal, deptno from emp where sal in(800, 1250, 5000, 2450, 3000);


Sub Query 사용(in)↓

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



4) 업무별로 최소금액보다 많이 받는 직원의 사번, 이름, 급여, 부서번호 조회

select empno, ename, sal, deptno from emp 

where sal>800 or sal>1250 or sal>5000 or sal>2450 or sal>3000;


Sub Query 사용(any=or)↓

select empno, ename, sal, deptno from emp 

where sal > any(select min(sal) from emp group by job);



5) 업무별 최대금액 이상 받는 직원의 사번, 이름, 업무, 부서번호 조회

select empno, ename, sal, deptno from emp 

where sal>=1300 and sal>=1600 and sal>=5000 and sal>=2975 and sal>=3000;


Sub Query 사용(all=any)↓

select empno, ename, sal, deptno from emp

where sal >= all(select max(sal) from emp group by job);



6) 급여와 보너스가 30번 부서에 있는 직원의 급여와 보너스가 같은 

   직원에 대해 사번, 이름, 부서번호, 급여, 보너스 조회 


MILLER의 데이터 수정

UPDATE emp

SET sal = 1500, comm=300

WHERE ename='MILLER';

   

   select ename, deptno, sal, com from emp where deptno=30;

   select empno, ename, deptno, sal, comm from emp 

where 

sal in(select sal from emp where deptno=30)

and

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



Sub Query 사용(다중열)↓

 select empno, ename, deptno, sal, comm from emp 

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



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

select distinct mgr from emp;


select ename, job, hiredate, sal from emp where empno=7839 or empno=7782 or empno=7698 or empno=7902 or empno=7566 or empno=7788;


Sub Query 사용(exist)↓

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

-> e는 emp테이블의 별명을 준것이다.





'DB' 카테고리의 다른 글

[DB] JOIN  (0) 2017.11.16
[DB] SQL 문제3  (0) 2017.11.16
[DB] DML  (0) 2017.11.15
[DB] SQL문제2  (0) 2017.11.14
[DB] SQL 문제  (0) 2017.11.13

댓글

Designed by JB FACTORY