2014년 4월 28일 월요일

오라클 SQL 7장 연습문제 및 정답

◈ 연 습 문 제 ◈

1. EMP 테이블에서 Blake와 같은 부서에 있는 모든 사원의 이름과 입사일자를 출력하는 SELECT문을 작성하시오.

select a.ename, a.hiredate
from emp a join dept b
   on a.deptno = b.deptno
  where a.deptno = (select deptno
                    from emp
                   where ename = 'BLAKE');
è  서브쿼리로 blake의 부서번호를 구한 뒤 메인쿼리에 조건절로 적용시켜서 blake와 같은 사원들의 정보를 출력합니다.

2. EMP 테이블에서 평균 급여 이상을 받는 모든 종업원에 대해서 종업원 번호와 이름을 출력하는 SELECT문을 작성하시오. 단 급여가 많은 순으로 출력하여라.

select empno, ename, sal
 from emp
where sal > (select avg(sal)
             from emp)
 order by sal desc;
è  서브쿼리로 평균급여를 구하고, 그 값으로 조건을 줘서 출력

3. EMP 테이블에서 이름에 T가 있는 사원이 근무하는 부서에서 근무하는 모든 종업원에 대해 사원 번호,이름,급여를 출력하는 SELECT문을 작성하시오. 단 사원번호 순으로 출력하여라.

select empno, ename, sal
from emp
where deptno IN (select deptno
                 from emp
                where ename like '%T%'
                 group by deptno)
è  서브쿼리로 T가 들어간 사람에 부서번호를 찾아와서 IN 연산으로 부서번호가 같은 사람을 출력시킴


4. EMP 테이블에서 부서 위치가 Dallas인 모든 종업원에 대해 이름,업무,급여를 출력하는 SELECT문을 작성하시오.

select ename, job, sal
from emp
where deptno = (select deptno
                 from dept
                where loc = 'DALLAS')
order by sal;
è  서브쿼리로 dallas의 부서번호를 찾고, 메인쿼리에서 같은 부서들을 찾아서 출력

5. EMP 테이블에서 King에게 보고하는 모든 사원의 이름과 급여를 출력하는 SELECT문을 작성하시오.

select ename, sal
from emp
where mgr = (select empno
              from emp
             where ename = 'KING')
order by sal;
è  서브쿼리로 king의 사원번호를 찾고, 메인쿼리에서 조건으로 사용하여 출력

6. EMP 테이블에서 SALES부서 사원의 이름,업무를 출력하는 SELECT문을 작성하시오.

select ename, job
from emp
where deptno = (select deptno
from dept
where dname = 'SALES')
order by job;
è  서브쿼리로 sales의 부서번호를 구한 뒤 메인쿼리에서 부서번호와 같은 사원들을 출력시킴






7. EMP 테이블에서 월급이 부서 30의 최저 월급보다 높은 사원을 출력하는 SELECT문을 작성하시오.

select empno 사번, ename 이름 , sal 급여
from emp
where sal > (select MIN(sal)
                    from emp
                   where deptno = 30);
è  서브쿼리로 30번부서에서 월급이 가장 작은 사람을 찾은 메인쿼리에서 그보다 사원들을 출력.

8. EMP 테이블에서 부서 10에서 부서 30의 사원과 같은 업무를 맡고 있는 사원의 이름과 업무를 출력하는 SELECT문을 작성하시오.

select *
from emp
where deptno = 30
and job IN (select job from emp where deptno = 10);
è  서브쿼리로 10번부서에 업무를 구한 뒤 메인쿼리에서 30번중에 10번과 같은 사원을 찾아서 출력시킴.

9. EMP 테이블에서 FORD와 업무도 월급도 같은 사원의 모든 정보를 출력하는 SELECT문을 작성하시오.

select *
from emp
where (job, sal) IN (    
                    select job, sal
                      from emp
                     where ename = 'FORD')
   and ename <> 'FORD';
è  다중열 서브쿼리로 ford의 업무와 월급을 구하고, 메인쿼리에서 업무와 같은 월급을 구하는데 단 본인은 제외시킨다.






10. EMP 테이블에서 업무가 JONS와 같거나 월급이 FORD이상인 사원의 정보를 이름,업무,부서번호,급여를 출력하는 SELECT문을 작성하시오. 단 업무별, 월급이 많은 순으로 출력하여라.

SELECT ename, job, deptno, sal
  FROM emp
 WHERE job = (
                SELECT job
                  FROM emp
                 WHERE ename = 'JONES')
       OR sal > (
                 SELECT sal
                  FROM emp
                  WHERE ename = 'FORD');
è  서브쿼리를 두개를 사용하여, 존과 포드에 업무와 월급을 각각 구한 뒤 or 연산으로 조건에 맞는 사람을 출력

11. EMP 테이블에서 SCOTT 또는 WARD와 월급이 같은 사원의 정보를 이름,업무,급여를 출력하는 SELECT문을 작성하시오.

SELECT ename, job, sal
  FROM emp
 WHERE sal IN (SELECT sal
                 FROM emp
                WHERE ename = 'SCOTT' OR ename = 'WARD');
è  다중행 서브쿼리로 스캇과 워드에 월급을 각각 구한 뒤 같은 사람을 출력


12. EMP 테이블에서 CHICAGO에서 근무하는 사원과 같은 업무를 하는 사원의 이름,업무를 출력하는 SELECT문을 작성하시오.

SELECT ename, job
  FROM emp
 WHERE job = (SELECT dname
                FROM dept
               WHERE loc = 'CHICAGO');
è  서브쿼리로 dept테이블에서 시카고에서 사원에 업무를 구한 뒤 메인에서 같은 업무인사람을 찾아서 출력
13. EMP 테이블에서 부서별로 월급이 평균 월급보다 높은 사원을 부서번호,이름,급여를 출력하는 SELECT문을 작성하시오.

SELECT e.deptno, e.ename, e.sal
  FROM emp e,
                   (  SELECT deptno, TRUNC (AVG (sal), 0) AS sal
                        FROM emp
                    GROUP BY deptno
                    ORDER BY deptno) f
 WHERE e.deptno = f.deptno
     AND e.sal > f.sal
ORDER BY SAL;
è  from절에서 서브쿼리를 만들고, 부서번호와 평균급여를 구한 뒤 where 절에서 부서번호와 급여가 더 높은사람을 찾아서 출력.


14. EMP 테이블에서 업무별로 월급이 평균 월급보다 낮은 사원을 부서번호,이름,급여를 출력하는 SELECT문을 작성하시오.

SELECT e.deptno, e.ename, e.sal
  FROM emp e,
                   (  SELECT deptno, TRUNC (AVG (sal), 0) AS sal
                        FROM emp
                    GROUP BY deptno
                    ORDER BY deptno) f
 WHERE e.deptno = f.deptno
     AND e.sal < f.sal
ORDER BY SAL;
è  13번 문제에서 e.sal f.sal 비교하는 부등호만 반대로 바꾸면 조건에 맞게 출력됩니다.








15. EMP 테이블에서 적어도 한명 이상으로부터 보고를 받을 수 있는 사원을 업무,이름,사원번호,부서번호를 출력하는 SELECT문을 작성하시오.

SELECT job, ename, empno, deptno
  FROM emp
 WHERE empno IN (SELECT mgr
                    FROM emp)
ORDER BY JOB;
è  서브쿼리로 mgr로 구한 뒤 한명이상이기 때문에 하나라도 같으면 해당하므로 IN으로 처리하여 출력

16. EMP 테이블에서 말단 사원의 사원번호,이름,업무,부서번호를 출력하는 SELECT문을 작성하시오.

SELECT empno, ename, job, deptno
    FROM emp
   WHERE job = 'CLERK'
ORDER BY empno;
è  조건에 사원인 clerk 조건으로 검색하여 출력.



댓글 없음:

댓글 쓰기