본문 바로가기

.etc/SCOTT

[210926] 서브쿼리 연습 24문제

4,5,6,8 필수

5,6,8,11,14,17,19(...),22 필수

 

--1. 이름이 ALLEN인 사원과 같은 업무를 하는 사람의 사원번호, 이름, 업무, 급여 추출

 

--2. EMP 테이블의 사원번호가 7521인 사원과 업무가 같고 급여가 7934인 사원보다 많은 사원의 사원번호, 이름, 담당업무, 입사일, 급여 추출

 

--3. EMP 테이블에서 급여의 평균보다 적은 사원의 사원번호, 이름, 업무, 급여, 부서번호 추출

 

--4. 부서별 최소급여가 20번 부서의 최소급여보다 큰 부서의 부서번호, 최소 급여 추출

 

--5. 업무별 급여 평균 중 가장 작은 급여평균의 업무와 급여평균 추출

 

--6. 업무별 최대 급여를 받는 사원의 사원번호, 이름, 업무, 입사일, 급여, 부서번호 추출

 

--7. 30번 부서의 최소급여를 받는 사원보다 많은 급여를 받는 사원의 사원번호, 이름, 업무, 입사일, 급여, 부서번호, 단 30번 부서는 제외하고 추출

 

--8. 급여와 보너스가 30번 부서에 있는 사원의 급여와 보너스가 같은 사원을 30번 부서의 사원은 제외하고 추출

 

--9. BLAKE와 같은 부서에 있는 모든 사원의 이름과 입사일자를 추출

 

--10. 평균급여 이상을 받는 모든 사원에 대해 사원의 번호와 이름을 급여가 많은 순서로 추출

 

--11. 이름에 T가 있는 사원이 근무하는 부서에서 근무하는 모든 사원에 대해 사원번호,이름,급여를 출력, 사원번호 순서로 추출

 

--12. 부서위치가 CHICAGO인 모든 사원에 대해 이름,업무,급여 추출

 

--13. KING에게 보고하는 모든 사원의 이름과 급여를 추출

 

--14. FORD와 업무와 월급이 같은 사원의 모든 정보 추출

 

--15. 업무가 JONES와 같거나 월급이 FORD 이상인 사원의 이름,업무,부서번호,급여 추출

 

--16. SCOTT 또는 WARD와 월급이 같은 사원의 이름,업무,급여를 추출

 

--17. SALES에서 근무하는 사원과 같은 업무를 하는 사원의 이름,업무,급여,부서번호 추출

 

--18. 자신의 업무별 평균 월급보다 낮은 사원의 부서번호, 이름, 급여, 자신의 부서 평균급여를 추출

 

--19. 사원번호,사원명,부서명,소속부서 인원수,업무,소속 업무 급여평균,급여를 추출

 

--20. 사원번호,사원명,부서번호,업무,급여, 자신의 소속 업무 평균급여를 추출

 

--21. 최소한 한 명의 부하직원이 있는 관리자의 사원번호,이름,입사일자,급여 추출

 

--22. 부하직원이 없는 사원의 사원번호, 이름, 업무, 부서번호 추출

 

--23. BLAKE의 부하직원의 이름, 업무, 상사번호 추출

 

--24. BLAKE와 같은 상사를 가진 사원의 이름,업무, 상사번호 추출

 

 

 

1.
select empnoenamejobsal from emp
where job=(select job from emp where ename='ALLEN');

2.
select empnoenamejobhiredatesal from emp
where job=(select job from emp where empno=7521)
   and sal>(select sal from emp where empno=7934);


3.
select empnoenamejobsaldeptno from emp
where sal<(select avg(salfrom emp);

4.

select deptnomin(salfrom emp
group by deptno
having min(sal)>(select min(salfrom emp where deptno=20);

5.

select jobavg(salfrom emp
group by job
having avg(sal)=(select min(avg(sal)) from emp
                     group by job);
--테이블 두개를 분리해서 생각한다음 로직 짜는 훈련하기 그래야 등호 아니면 IN 꺼낼 수 있음

6.

select empnoenamejobhiredatesaldeptno from emp
where (jobsalin (select jobmax(salfrom emp
group by job);

7.

select empnoenamejobhiredatesaldeptno from emp
where sal>(select min(salfrom emp
              where deptno=30)
   and deptno != 30;

8.

select empnoenamejobhiredatesaldeptno from emp
where (salnvl(comm0)) in (select salnvl(comm0from emp
                                 where deptno=30)
   and deptno!=30;

9.

select enamehiredate from emp
where deptno=(select deptno from emp
            where ename='BLAKE');

10.

select empnoename from emp
where sal>(select avg(salfrom emp)
order by sal desc;

11.
select deptno, empno, ename, sal from emp
where deptno in (select deptno from emp where instr(ename, 'T', 1, 1)!=0)
order by empno;

SELECT EMPNO,ENAME,SAL
FROM EMP
WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE INSTR(ENAME,'T') != 0)
ORDER BY EMPNO;

SELECT EMPNO,ENAME,SAL
  FROM EMP
 WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE ENAME LIKE '%T%');

12.

SELECT ENAME, JOB, SAL
  FROM EMP JOIN DEPT USING(DEPTNO)
 WHERE LOC = 'CHICAGO';

--단순한 조인
select e.ename, e.job, e.sal
  from emp e, dept d
 where e.deptno=d.deptno
   and d.loc='CHICAGO';

13.

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

14.

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

15.

select ename, job, empno, sal from emp
where job=(select job from emp where ename='JONES')
     or sal>(select sal from emp where ename='FORD');

16.

SELECT ENAME, JOB, SAL
  FROM EMP
 WHERE SAL IN (SELECT SAL FROM EMP WHERE ENAME = 'SCOTT' OR ENAME = 'WARD');

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

17.

select ename, job, sal, deptno from emp
where job in (select job from emp natural join dept
                    where dname='SALES');

18.

select
   deptno, ename, sal,
   (select avg(sal) from emp t
   where t.deptno=e.deptno) deptavgsal
from emp e
where sal<(select avg(sal) from emp t
     where t.deptno=e.deptno);

19.

select
   empno, ename, dname,
   (select count(*) from emp t
   where t.deptno=e.deptno) "부서인원수",
   job,
   (select avg(sal)
   from emp t
   where t.job=e.job) "업무평균급여",
   sal
from emp e, dept d
where e.deptno=d.deptno;

20.

select
   empno, ename, deptno, job, sal,
   (select avg(sal) from emp t
   where t.job=e.job) "업무평균급여"
from emp e;

21.

SELECT EMPNO, ENAME, HIREDATE, SAL
  FROM EMP
 WHERE EMPNO IN (SELECT MGR FROM EMP);

--다른 방법 중요
 select
   empno, ename, hiredate, sal
  from emp e
where exists(select 1 from emp t
            where t.mgr=e.empno);

22.

select
   empno, ename, job, deptno from emp e
where not exists(select 1 from emp t
            where t.mgr=e.empno);

23.

select ename, job, mgr from emp
where mgr=(select empno from emp
       where ename='BLAKE');

24.
select ename, job, mgr from emp
where mgr=(select mgr from emp
       where ename='BLAKE');