본문 바로가기

ORACLE/Excercise

Oracle - 연습문제 #6


서브쿼리 (SUBQUERY)

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

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select ename, hiredate, deptno
  2  from emp
  3  where deptno = (
  4     select deptno from emp
  5*            where ename='BLAKE')
SQL> /

ENAME                HIREDATE     DEPTNO
-------------------- -------- ----------
ALLEN                81/02/20         30
WARD                 81/02/22         30
MARTIN               81/09/28         30
BLAKE                81/05/01         30
TURNER               81/09/08         30
JAMES                81/12/03         30

6 개의 행이 선택되었습니다.

SQL>



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


-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select empno, ename, sal
  2  from emp
  3  where sal >= (
  4     select avg(sal) from emp)
  5* order by sal desc
SQL> /

     EMPNO ENAME                       SAL
---------- -------------------- ----------
      7839 KING                       5000
      7902 FORD                       3000
      7788 SCOTT                      3000
      7566 JONES                      2975
      7698 BLAKE                      2850
      7782 CLARK                      2450

6 개의 행이 선택되었습니다.

SQL>


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

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select empno, ename, sal,deptno
  2  from emp
  3  where deptno in (select deptno from emp
  4     where ename like '%T%')
  5* order by empno desc
SQL> /

     EMPNO ENAME                       SAL     DEPTNO
---------- -------------------- ---------- ----------
      7902 FORD                       3000         20
      7900 JAMES                       950         30
      7876 ADAMS                      1100         20
      7844 TURNER                     1500         30
      7788 SCOTT                      3000         20
      7698 BLAKE                      2850         30
      7654 MARTIN                     1250         30
      7566 JONES                      2975         20
      7521 WARD                       1250         30
      7499 ALLEN                      1600         30
      7369 SMITH                       800         20

11 개의 행이 선택되었습니다.

SQL>


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

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select ename, job, sal
  2  from emp
  3  where deptno = (
  4     select deptno
  5     from dept
  6*    where loc='DALLAS')
SQL> /

ENAME                JOB                       SAL
-------------------- ------------------ ----------
SMITH                CLERK                     800
JONES                MANAGER                  2975
SCOTT                ANALYST                  3000
ADAMS                CLERK                    1100
FORD                 ANALYST                  3000

SQL>


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

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select ename, sal, job, empno, mgr
  2  from emp
  3  where mgr = (
  4     select empno from emp
  5*    where ename = 'KING')
SQL> /

ENAME          SAL JOB          EMPNO        MGR
---------- ------- ---------- ------- ----------
JONES         2975 MANAGER       7566       7839
BLAKE         2850 MANAGER       7698       7839
CLARK         2450 MANAGER       7782       7839

SQL>


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

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select ename, job
  2  from emp
  3  where deptno = (
  4     select deptno
  5     from dept
  6*    where dname='SALES')
SQL> /

ENAME                JOB
-------------------- ------------------
ALLEN                SALESMAN
WARD                 SALESMAN
MARTIN               SALESMAN
BLAKE                MANAGER
TURNER               SALESMAN
JAMES                CLERK

6 개의 행이 선택되었습니다.

SQL>


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

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select empno, ename, job, sal, deptno
  2  from emp
  3  where sal > any (
  4     select sal
  5     from emp
  6*    where deptno=30)
SQL> /

     EMPNO ENAME                JOB                       SAL     DEPTNO
---------- -------------------- ------------------ ---------- ----------
      7839 KING                 PRESIDENT                5000         10
      7902 FORD                 ANALYST                  3000         20
      7788 SCOTT                ANALYST                  3000         20
      7566 JONES                MANAGER                  2975         20
      7698 BLAKE                MANAGER                  2850         30
      7782 CLARK                MANAGER                  2450         10
      7499 ALLEN                SALESMAN                 1600         30
      7844 TURNER               SALESMAN                 1500         30
      7934 MILLER               CLERK                    1300         10
      7521 WARD                 SALESMAN                 1250         30
      7654 MARTIN               SALESMAN                 1250         30

     EMPNO ENAME                JOB                       SAL     DEPTNO
---------- -------------------- ------------------ ---------- ----------
      7876 ADAMS                CLERK                    1100         20

12 개의 행이 선택되었습니다.

SQL>


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

------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select ename, job, deptno
  2  from emp
  3  where deptno in (
  4     select deptno
  5     from emp
  6*    where deptno = 20)
SQL> /

ENAME                JOB                    DEPTNO
-------------------- ------------------ ----------
FORD                 ANALYST                    20
ADAMS                CLERK                      20
SCOTT                ANALYST                    20
JONES                MANAGER                    20
SMITH                CLERK                      20

SQL>

or

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select ename, job, deptno
  2  from emp
  3  where deptno in (
  4     select deptno
  5     from emp
  6     where deptno > 10)
  7  and deptno in (
  8     select deptno
  9     from emp
 10*    where deptno < 30)
SQL> /

ENAME                JOB                    DEPTNO
-------------------- ------------------ ----------
SMITH                CLERK                      20
JONES                MANAGER                    20
SCOTT                ANALYST                    20
ADAMS                CLERK                      20
FORD                 ANALYST                    20

SQL>


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

-------------------------------------------------------------------

SQL> col ename format a10
SQL> col job format a10
SQL> col sal format 999999
SQL> col empno format 999999

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select *
  2  from emp
  3  where job = (select job from emp where ename = 'FORD')
  4  and sal = (select sal from emp where ename = 'FORD')
  5* and ename not in ('FORD')
SQL> /

  EMPNO ENAME      JOB               MGR HIREDATE     SAL       COMM     DEPTNO
------- ---------- ---------- ---------- -------- ------- ---------- ----------
   7788 SCOTT      ANALYST          7566 87/04/19    3000                    20

SQL>

or

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select *
  2  from emp
  3  where ename != 'FORD' and(job,sal) in (
  4     select job,sal from emp
  5*    where ename='FORD')
SQL> /

  EMPNO ENAME      JOB               MGR HIREDATE     SAL       COMM     DEPTNO
------- ---------- ---------- ---------- -------- ------- ---------- ----------
   7788 SCOTT      ANALYST          7566 87/04/19    3000                    20

SQL>


or

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select *
  2  from emp
  3  where job in (
  4     select job from emp
  5     where ename='FORD')
  6  and sal in (
  7     select sal from emp
  8     where ename='FORD')
  9* and ename!='FORD'
SQL> /

  EMPNO ENAME      JOB               MGR HIREDATE     SAL       COMM     DEPTNO
------- ---------- ---------- ---------- -------- ------- ---------- ----------
   7788 SCOTT      ANALYST          7566 87/04/19    3000                    20

SQL>

or

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select *
  2  from emp
  3  where (job,sal) in (
  4     select job,sal from emp
  5     where ename='FORD')
  6* and ename!='FORD'
SQL> /

  EMPNO ENAME      JOB               MGR HIREDATE     SAL       COMM     DEPTNO
------- ---------- ---------- ---------- -------- ------- ---------- ----------
   7788 SCOTT      ANALYST          7566 87/04/19    3000                    20

SQL>

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


-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select ename, job, deptno, sal
  2  from emp
  3  where job = (
  4     select job from emp
  5     where ename='JONES')
  6  or sal >= (
  7     select sal from emp
  8     where ename='FORD')
  9* order by job,sal desc
SQL> /

ENAME      JOB            DEPTNO     SAL
---------- ---------- ---------- -------
FORD       ANALYST            20    3000
SCOTT      ANALYST            20    3000
JONES      MANAGER            20    2975
BLAKE      MANAGER            30    2850
CLARK      MANAGER            10    2450
KING       PRESIDENT          10    5000

6 개의 행이 선택되었습니다.

SQL>


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

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select ename, job, sal
  2  from emp
  3  where sal in (
  4     select sal from emp
  5*    where ename='SCOTT' or ename='WARD')
SQL> /

ENAME      JOB            SAL
---------- ---------- -------
MARTIN     SALESMAN      1250
WARD       SALESMAN      1250
FORD       ANALYST       3000
SCOTT      ANALYST       3000

SQL>


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

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select ename, job
  2  from emp
  3  where deptno = (
  4     select deptno from dept
  5*    where loc='CHICAGO')
SQL> /

ENAME      JOB
---------- ----------
ALLEN      SALESMAN
WARD       SALESMAN
MARTIN     SALESMAN
BLAKE      MANAGER
TURNER     SALESMAN
JAMES      CLERK

6 개의 행이 선택되었습니다.

SQL>


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

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select d.deptno, dname, sal
  2  from emp e, dept d
  3  where e.deptno = d.deptno
  4  and sal > (
  5     select avg(sal) from emp, dept)
  6* order by deptno
SQL> /

    DEPTNO DNAME                            SAL
---------- ---------------------------- -------
        10 ACCOUNTING                      2450
        10 ACCOUNTING                      5000
        20 RESEARCH                        3000
        20 RESEARCH                        3000
        20 RESEARCH                        2975
        30 SALES                           2850

6 개의 행이 선택되었습니다.

SQL>


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

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select d.deptno, dname, sal
  2  from emp e, dept d
  3  where e.deptno = d.deptno
  4  and sal < (
  5     select avg(sal) from emp, dept)
  6* order by deptno
SQL> /

    DEPTNO DNAME                            SAL
---------- ---------------------------- -------
        10 ACCOUNTING                      1300
        20 RESEARCH                        1100
        20 RESEARCH                         800
        30 SALES                            950
        30 SALES                           1500
        30 SALES                           1250
        30 SALES                           1600
        30 SALES                           1250

8 개의 행이 선택되었습니다.

SQL>


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

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select job, ename, empno, deptno
  2  from emp e
  3  where exists (
  4     select * from emp
  5*    where e.empno=mgr)
SQL> /

JOB        ENAME        EMPNO     DEPTNO
---------- ---------- ------- ----------
MANAGER    JONES         7566         20
MANAGER    BLAKE         7698         30
MANAGER    CLARK         7782         10
ANALYST    SCOTT         7788         20
PRESIDENT  KING          7839         10
ANALYST    FORD          7902         20

6 개의 행이 선택되었습니다.

SQL>


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

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select empno, ename, job, deptno
  2  from emp
  3  where job in (
  4     select job from emp
  5*    where job='CLERK')
SQL> /

  EMPNO ENAME      JOB            DEPTNO
------- ---------- ---------- ----------
   7934 MILLER     CLERK              10
   7900 JAMES      CLERK              30
   7876 ADAMS      CLERK              20
   7369 SMITH      CLERK              20

SQL>

'ORACLE > Excercise' 카테고리의 다른 글

Oracle - 연습문제 #8  (0) 2008.12.30
Oracle - 연습문제 #7  (0) 2008.12.29
Oracle - 연습문제 #5  (0) 2008.12.27
Oracle - 연습문제 #4  (0) 2008.12.27
Oracle - 연습문제 #3  (0) 2008.12.26
Oracle - 연습문제 #2  (0) 2008.12.26