SQL

[SQL] 복습문제 - Subquery

breadz 2021. 7. 12. 01:39

Q_ 최대월급을 받는 사원의 이름과 월급을 출력하시오!

select ename, sal
from emp
where sal = (select max(sal)
             from emp);



Q_JONES보다 더 많은 월급을 받는 사원들의 이름과 월급을 출력하시오!

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

 

Q_ 'SCOTT'와 같은 월급을 받는 사원들의 이름과 월급을 출력하시오!

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

 


Q_ ALLEN 보다 늦게 입사한 사원들의 이름과 입사일을 출력하시오!

select ename, hiredate
from emp
where hiredate > (select hiredate
                  from emp
                  where ename = 'ALLEN');

 


Q_ 사원 테이블에 최대월급을 받는 사원의 이름과 월급을 출력하시오!

// 사원 테이블에서 최대월급이 얼만데!가 먼저 궁금해야함

select ename, sal
from emp
where sal = (select max(sal)
             from emp);

 


Q_ ALLEN과 같은 부서번호에서 근무하는 사원들의 이름과 부서번호를 출력하시오!

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

 


Q_ SCOTT과 같은 직업을 갖는 사원들의 이름과 직업을 출력하는데 SCOTT은 제외하고 출력하시오!

// SCOTT은 제외하고 ~~~ 뭐지?

select ename, job
from emp
where job in (select job
              from emp
              where ename = 'SCOTT')
and ename != 'SCOTT';

 



Q_ KING에게 보고하는 사원들의 이름을 출력하시오! (KING의 직속부하 사원들을 출력하시오!)

// mgr이 KING의 mgr인 사원을 출력하시오

select ename
from emp
where mgr = (select empno
             from emp
             where ename = 'KING');

 


Q_ DALLAS에 있는 부서번호에서 근무하는 사원들의 이름과 월급을 출력하시오! (조인 쓰지 말고 서브쿼리로만)

// DALLAS에 있는 부서번호가 뭔데~~~~

select ename, sal
from emp
where deptno = (select deptno
                from dept
                where loc = 'DALLAS');

 


Q_ 직업이 SALESMAN인 사원들과 월급이 같은 사원들의 이름과 월급을 출력하시오!

// 직업이 SALESMAN인 사원들의 월급이 각각 얼만데~~~

// 서브쿼리의 출력값이 다중행일 경우 '=' 대신 'IN' 연산자를 사용한다

select ename, sal
from emp
where sal in(select sal
             from emp
             where job = 'SALESMAN');

 


Q_ 직업이 SALESMAN인 사원들과 월급이 같지 않은 사원들의 이름과 월급을 출력하시오!

select ename, sal
from emp
where sal not in(select sal
                 from emp
                 where job = 'SALESMAN');

 


Q_ 관리자인 사원들의 이름을 출력하시오! (자기 밑에 직속 부하 사원이 한명이라고 있는 사원)

select ename
from emp
where empno in (select mgr
                from emp);

 

Q_ 관리자가 아닌 사원들의 이름을 출력하시오 ! (즉 자기 밑에 직속부하가 한명도 없는 사원들을 출력하시오)

select ename
from emp
where empno not in (select nvl(mgr,0)
                    from emp);

 

Q_ 직업이 SALESMAN 인 사원들중에서의 최대월급보다 더 많은 월급을 받는 사원들의 이름과 월급을 출력하시오 !

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

 

Q_ 직업이 SALESMAN 인 사원들중에서 가장 작은 월급을 받는 사원보다 더 큰 월급을 받는 사원들의 이름과 월급을 출력하시오 !

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

 

Q_ 30번 부서번호인 사원들 중에서 가장 늦게 입사한 사원보다 더 늦게 입사한 사원들의 이름과 입사일을 출력하시오 !
( 전체 사원을 대상으로 수행)

select ename, hiredate
from emp
where hiredate > all (select hiredate
                      from emp
                      where deptno = 30);

 

Q_ 부서 테이블에서 부서번호와 부서위치를 출력하는데 사원 테이블에 존재하는 부서번호에 대한 것만 출력하시오 !

select deptno, loc
from dept
where deptno in (select deptno
                 from emp);

 

Q_ 부서테이블에서 부서번호와 부서위치를 출력하는데 사원 테이블에 존재하지 않는 것을 출력하시오 !

select deptno, loc
from dept d
where not exists (select e.deptno
                  from emp e
                  where e.deptno = d.deptno);

'SQL' 카테고리의 다른 글

[SQL] 복습문제 - Join  (0) 2021.07.11
[SQL][TIL] GROUP BY, ROLLUP, CUBE  (0) 2021.07.09
[SQL][TIL] 집합 연산자  (0) 2021.07.09
[SQL][TIL] ADSQL문제풀이  (0) 2021.07.09
[SQL][TIL] exists 연산자 (where절의 in 연산자 대신 사용)  (0) 2021.07.08