서브쿼리 (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 |