상세 컨텐츠

본문 제목

[오라클 교재] 제7장 서브쿼리(SUBQUERY)

프로그래밍/DB

by 라제폰 2008. 12. 26. 21:01

본문

1. SUBQUERY

알려지지 않은 기준에 의한 데이터 검색을 위한 NESTED SUBQUERY와 데이터 조작 문장에  SUBQUERY를 사용하는 방법을 배우고 SUBQUERY에 의해 검색된 데이터 정렬에 대해 다루기로 한다.

 

1.1 SUBQUERY의 개념

다른 SELECT 문장의 절에 내장된 SELECT 문장 입니다. SUBQUERY는 여러 절에서 사용 가능하며 SELECT 문장 안에 기술된 SELECT 문장이다. NESTED SUBQUERY MAIN QUERY이전에 한번만 수행되며 SUBQUERY의 결과를 MAIN QUERY에 의해 조건으로 사용된다. SUBQUERY를 사용하여 간단한 문장을 강력한 문장으로 만들 수 있고 테이블 자체의 데이터에 의존하는 조건으로 테이블의 행을 검색할 필요가 있을 때 아주 유용하다.

 

1.2 Syntax

 MAIN QUERY

SELECT               select_list

FROM         table

WHERE        expression operator        SUBQUERY

 


                            (SELECT        select_list

                            FROM          table

 WHERE              condition);

1)       SUBQUERY는 다른 하나의 SQL 문장의 절에 NESTEDED SELECT 문장이다.

2)       알려지지 않은 조건에 근거한 값들을 검색하는 SELECT 문장을 작성하는데 유용하다.

3)       SUBQUERY MAIN QUERY 이전에 한 번 실행한다.

4)       SUBQUERY의 결과는 MAIN OUTER QUERY에 의해 사용된다.

 

Guidelines

1)       SUBQUERY는 괄호로 묶어야 한다.

2)       두 종류의 비교 연산자들이 SUBQUERY에 사용된다.

       단일 행 연산자

=,>, >=, <, <=, <>, !=

       복수 행 연산자

IN, NOT IN, ANY, ALL, EXISTS

3)       SUBQUERY는 연산자의 오른쪽에 나타나야 한다.

4)       SUBQUERY는 많은 SQL 명령에서 사용 가능하다.

5)       SUBQUERY ORDER BY절을 포함할 수 없다.

 

1.3 SUBQUERY를 사용할 수 있는 절

1)       WHERE, HAVING, UPDATE

2)       INSERT 구문의 INTO

3)       UPDATE 구문의 SET

4)       SELECT DELETE FROM

 

1.4 SUBQUERY의 유형

1)       단일 행 SUBQUERY : SELECT문장으로부터 오직 하나의 행만을 검색하는 질의입니다

2)       다중 행 SUBQUERY : SELECT문장으로부터 하나 이상의 행을 검색하는 질의입니다

3)       다중 열 SUBQUERY : SELECT문장으로부터 하나 이상의 열을 검색하는 질의입니다

 

1.5 단일 행 SUBQUERY

단일 행 SUBQUERY는 내부 SELECT문장으로부터 하나의 행을 검색하는 질의입니다. 이런 유형의 SUBQUERY는 단일 행 연산자를 사용합니다. 이때 WHERE절에 기술된 열의 개수와 데이터 타입은 SELECT 절에 기술된 열과 좌측부터 11 대응되며 데이터 타입이 일치해야 한다.

 

문제) EMP 테이블에서 SCOTT의 급여보다 많은 사원의 정보를 사원번호,이름,담당업무,급여를 출력하여라.

 


  SQL> SELECT sal                   SQL> SELECT empno,ename,job,sal

    2  FROM emp                               2  FROM emp

    3  WHERE ename = 'SCOTT';               3  WHERE sal > 3000;

                                     

        SAL                               EMPNO ENAME      JOB             SAL

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

       3000                                7839 KING       PRESIDENT      5000

 

 

 


  SQL> SELECT empno,ename,job,sal

    2  FROM emp

    3  WHERE sal > (SELECT sal

    4             FROM emp

    5             WHERE ename = 'SCOTT');

 

      EMPNO ENAME      JOB             SAL

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

       7839 KING       PRESIDENT      5000

 

 

문제1) EMP 테이블에서 사원번호가 7521의 업무와 같고 급여가 7934보다 많은 사원의 정보를 사원번호,이름,담당업무,입사일자,급여를 출력하여라.

SQL> SELECT empno,ename,job,hiredate,sal

  2  FROM emp

  3  WHERE job = (SELECT job

  4                    FROM emp

  5                    WHERE empno = 7521)

  6  AND

  7          sal > (SELECT sal

  8                    FROM emp

  9                    WHERE empno = 7934);

 

    EMPNO ENAME      JOB       HIREDATE                 SAL

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

     7499 ALLEN      SALESMAN  20-FEB-81               1600

     7844 TURNER     SALESMAN  08-SEP-81               1500

 

1.5.1) SUBQUERY에서 그룹 함수 사용

단일 행을 RETURN하는 SUBQUERY에 그룹 함수를 사용하여 MAIN QUERY로부터 데이터를 출력할 수 있다.

 

문제2) EMP 테이블에서 급여의 평균보다 적은 사원의 정보를 사원번호,이름,담당업무,급여,부서번호를 출력하여라.

SQL> SELECT empno,ename,job,sal,deptno

  2  FROM emp

  3  WHERE sal < (SELECT AVG(sal)

  4                    FROM emp);

 

EMPNO ENAME      JOB             SAL    DEPTNO

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

     7654 MARTIN     SALESMAN       1250        30

     7499 ALLEN      SALESMAN       1600        30

     7844 TURNER     SALESMAN       1500        30

     7900 JAMES      CLERK           950        30

     7521 WARD       SALESMAN       1250        30

     7369 SMITH      CLERK           800        20

     7876 ADAMS      CLERK          1100        20

. . . . . . . . . .

8 rows selected.

 

1.5.2) SUBQUERY가진 HAVING

SUBQUERY WHERE 절 뿐만 아니라 HAVING절에서도 사용 가능하다. 오라클 서버는 SUBQUERY를 실행하고 MAIN QUERY HAVING절에 RETURN한다.

 

문제3) EMP 테이블에서 20번 부서의 최소 급여보다 많은 모든 부서를 출력하여라.

SQL> SELECT deptno,MIN(sal)

  2  FROM emp

  3  GROUP BY deptno

  4  HAVING MIN(sal) > (SELECT MIN(sal)

  5                    FROM emp

  6                    WHERE deptno = 20);

 

   DEPTNO  MIN(SAL)

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

       10      1300

       30       950

 

문제4) EMP 테이블에서 업무별로 가장 적은 급여를 출력하여라.

SQL> SELECT job,avg(sal)

  2  FROM emp

  3  GROUP BY job

  4  HAVING AVG(sal) = (SELECT MIN(AVG(sal))

  5                    FROM emp

  6                    GROUP BY job);

 

JOB        AVG(SAL)

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

CLERK        1037.5

 

1.6 다중 행 SUBQUERY

하나 이상의 행을 RETURN하는 SUBQUERY를 다중 행 SUBQUERY라고 부릅니다. 다중 행 SUBQUERY는 단일 행 연산자 대신에 다중 행 연산자를 사용합니다. 다중 행 연산자는 하나 이상의 값을 요구합니다.

 

SQL> SELECT empno,ename,job,hiredate,sal,deptno

  2  FROM emp

  3  WHERE sal = (SELECT MIN(sal)

  4                FROM emp

  5                GROUP BY deptno);

ERROR:

ORA-01427: single-row subquery returns more than one row

 

no rows selected

 

SELECT 문의 문제점은 SUBQUERY에서 RETURN되는 ROW 1개 이상이다. 이런 경우는 다중 행 SUBQUERY연산자를 이용하여야 한다

SQL> SELECT empno,ename,job,hiredate,sal,deptno

  2  FROM emp

  3  WHERE sal IN (SELECT MIN(sal)

  4                    FROM emp

  5                    GROUP BY deptno);

 

    EMPNO ENAME      JOB       HIREDATE                 SAL    DEPTNO

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

     7369 SMITH      CLERK     17-DEC-80                800        20

     7900 JAMES      CLERK     03-DEC-81                950        30

     7934 MILLER     CLERK     23-JAN-82               1300        10

 

1.6.1) 다중 행 SUBQUERY 연산자

1)       IN 연산자

2)       ANY 연산자

3)       ALL 연산자

4)       EXISTS 연산자

 

1.6.2) IN 연산자

2개 이상의 값을 RETURN하는 SUBQUERY에 대하여 비교 연산자(=,!=,<,<=,>,>=)를 기술하면 ERROR가 발생한다. 이런 경우 SUBQUERY에서 RETURN된 목록의 각각과 비교하여 QUERY를 수행하는 연산자가 IN이다.

 

문제5) EMP 테이블에서 업무별로 최소 급여를 받는 사원의 정보를 사원번호,이름,업무,입사일자,급여,부서번호를 출력하여라

SQL> SELECT empno,ename,job,hiredate,sal,deptno

  2  FROM emp

  3  WHERE sal IN (SELECT MIN(sal)

  4                 FROM emp

  5                 GROUP BY job);

 

EMPNO ENAME      JOB       HIREDATE                 SAL    DEPTNO

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

     7369 SMITH      CLERK     17-DEC-80                800        20

     7654 MARTIN     SALESMAN  28-SEP-81               1250        30

     7521 WARD       SALESMAN  22-FEB-81               1250        30

     7782 CLARK      MANAGER   09-JUN-81               2450        10

     7902 FORD       ANALYST   03-DEC-81               3000        20

     7788 SCOTT      ANALYST   09-DEC-82               3000        20

     7839 KING       PRESIDENT 17-NOV-81               5000        10

 

7 rows selected.

 

1.6.3) ANY 연산자

2개 이상의 값을 RETURN하는 SUBQUERY에 대하여는 그런 값들을 어떻게 사용하는가를 지정해 두어야 한다. 비교 연산자(=,!=,<,<=,>,>=) SUBQUERY사이에 ANY연산자를 기술하여 RETURN  목록의 각각의 값과 비교한다.

 

문제6) EMP 테이블에서 30번 부서의 최소 급여를 받는 사원 보다 많은 급여를 받는 사원의 정보를 사원번호,이름,업무,입사일자,급여,부서번호를 출력하여라. 30번은 제외

SQL> SELECT empno,ename,job,hiredate,sal,deptno

  2  FROM emp

  3  WHERE deptno != 30 AND sal > ANY (SELECT sal

  4                                   FROM emp

  5                                   WHERE deptno = 30);

 

EMPNO ENAME      JOB       HIREDATE                 SAL    DEPTNO

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

     7839 KING       PRESIDENT 17-NOV-81               5000        10

     7782 CLARK      MANAGER   09-JUN-81               2450        10

     7566 JONES      MANAGER   02-APR-81               2975        20

     7902 FORD       ANALYST   03-DEC-81               3000        20

     7788 SCOTT      ANALYST   09-DEC-82               3000        20

     7876 ADAMS      CLERK     12-JAN-83               1100        20

. . . . . . . . . .

7 rows selected.

 

1.6.4) ALL 연산자

2개 이상의 값을 RETURN하는 SUBQUERY에 대하여는 그런 값들을 어떻게 사용하는가를 지정해 두어야 한다. 비교 연산자(=,!=,<,<=,>,>=) SUBQUERY사이에 ALL연산자를 기술하여 RETURN  목록의 모든 값과 비교한다.

 

문제7) EMP 테이블에서 30번 부서의 최고 급여를 받는 사원 보다 많은 급여를 받는 사원의 정보를 사원번호,이름,업무,입사일자,급여,부서번호를 출력하여라. 30번은 제외

SQL> SELECT empno,ename,job,hiredate,sal,deptno

  2  FROM emp

  3  WHERE deptno != 30 AND sal > ALL (SELECT sal

  4                                     FROM emp

  5                                     WHERE deptno = 30);

 

    EMPNO ENAME      JOB       HIREDATE                 SAL    DEPTNO

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

     7839 KING       PRESIDENT 17-NOV-81               5000        10

     7566 JONES      MANAGER   02-APR-81               2975        20

     7902 FORD       ANALYST   03-DEC-81               3000        20

     7788 SCOTT      ANALYST   09-DEC-82               3000        20

1.6.5) EXISTS 연산자

SUBQUERY에서 적어도 1개의 행을 RETURN하면 논리식은 참이고 그렇지 않으면 거짓이다.

 

문제8) EMP 테이블에서 적어도 한명의 사원으로부터 보고를 받을 수 있는 사원의 정보를 사원번호,이름,업무,입사일자,급여를 출력하여라. 단 사원번호 순으로 정렬하여라.

SQL> SELECT empno,ename,job,hiredate,sal,deptno

  2  FROM emp e

  3  WHERE EXISTS (SELECT *

  4                 FROM emp

  5                 WHERE e.empno = mgr)

  6  ORDER BY empno;

 

EMPNO ENAME      JOB       HIREDATE                 SAL    DEPTNO

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

     7566 JONES      MANAGER   02-APR-81               2975        20

     7698 BLAKE      MANAGER   01-MAY-81               2850        30

     7782 CLARK      MANAGER   09-JUN-81               2450        10

     7788 SCOTT      ANALYST   09-DEC-82               3000        20

     7839 KING       PRESIDENT 17-NOV-81               5000        10

     7902 FORD       ANALYST   03-DEC-81               3000        20

 

6 rows selected.

 

1.7 다중 열 SUBQUERY

SUBQUERY의 구문을 작성할 때 WHERE 절에 비교되는 열이 하나가 아니라 여러 개의 열을 동시에 비교하는 경우가 있다. 이런 경우 다중 열 SUBQUERY라하여 Pairwise 되었다고 한다.

 

1.7.1) Syntax

SELECT        * | column1[,column2,...]

      FROM   table

      WHERE  (column1,column2,...) IN ( SELECT column1,column2,...

                          FROM           table

                                         WHERE            condition);

 

SUBQUERY로 작성된 구문을 실행하면 의외의 결과가 검색되는 경우가 있을 것이다. 이런 경우는 반드시 다중 열 SUBQUERY를 사용하여 조회하여야 올바른 자료를 검색할 수 있다. 아래의 예를 보고 정확한 개념을 이해하기 바란다.

 

 

 

문제9) EMP 테이블에서 급여와 보너스가 부서 30에 있는 어떤 사원의 보너스와 급여에 일치하는 사원의 이름,부서번호,급여,보너스를 출력하여라.

여러분의 이해를 돕기 위해 자료를 수정하였다. 아래의 UPDATE문장을 수행한 후 SELECT문장을 수행하여라. UPDATE 문장은 다음 장에서 기술된다.

SQL> UPDATE emp

  2  SET sal = 1500, comm = 300

  3  WHERE empno = 7934;

 

1 row updated.

SQL> SELECT ename,deptno,sal,comm

  2  FROM emp

  3  WHERE sal IN (SELECT sal

  4                    FROM emp

  5                    WHERE deptno = 30)

  6  AND NVL(comm,-1) IN (SELECT NVL(comm,-1)

  7                    FROM emp

  8                    WHERE deptno = 30);

 

ENAME         DEPTNO       SAL      COMM

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

JAMES             30       950

BLAKE             30      2850

TURNER            30      1500         0

MILLER            10      1500       300

ALLEN             30      1600       300

WARD              30      1250       500

MARTIN            30      1250      1400

 

7 rows selected.

SQL> SELECT deptno,ename,job,sal,comm

  2  FROM emp

  3  ORDER BY deptno,ename;

 

   DEPTNO ENAME      JOB             SAL      COMM

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

. . . . . . . . . .

30 BLAKE      MANAGER        2850

       30 JAMES      CLERK           950

       30 MARTIN     SALESMAN       1250      1400

       30 TURNER     SALESMAN       1500         0

       30 WARD       SALESMAN       1250       500

14 rows selected.

 

♣ 중요

위 결과는 30번 부서에 급여가 1500이고 보너스가 300인 사원이 없는데도 출력되었다. 이는 조건을 각각 별도로 조회할 경우에 발생되는 문제점이다. 이를 해결하기 위해서는 Pairwise SUBQUERY를 이용하여야 한다.

문제10) 업무별로 최소 급여를 받는 사원의 정보를 사원번호,이름,업무,부서번호를 출력하여라. 단 업무별로 정렬하여라.

여러분의 이해를 돕기 위해 자료를 수정하였다. 아래의 UPDATE문장을 수행한 후 SELECT문장을 수행하여라. UPDATE 문장은 다음 장에서 설명된다.

 

SQL> UPDATE emp

  2  SET sal = 2450

  3  WHERE empno = 7900;

 

1 row updated.

SQL> SELECT empno,ename,job,sal,deptno

  2  FROM emp

  3  WHERE sal IN (SELECT MIN(sal)

  4                        FROM emp

  5                        GROUP BY job)

  6  ORDER BY job;

 

EMPNO ENAME      JOB             SAL    DEPTNO

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

     7902 FORD       ANALYST        3000        20

     7788 SCOTT      ANALYST        3000        20

     7369 SMITH      CLERK           800        20

     7900 JAMES      CLERK          2450        30

     7782 CLARK      MANAGER        2450        10

     7839 KING       PRESIDENT      5000        10

     7654 MARTIN     SALESMAN       1250        30

     7521 WARD       SALESMAN       1250        30

 

8 rows selected.

SQL> SELECT job,MIN(sal)

  2  FROM emp

  3  GROUP BY job;

 

JOB        MIN(SAL)

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

ANALYST        3000

CLERK           800

MANAGER        2450

PRESIDENT      5000

SALESMAN       1250

 

♣ 중요

위 결과를 사번이 7900인 사원은 업무가 CLERK이다. CLERK의 업무의 최소 급여는 800에도 불구하고 출력되었다. 이는 업무별 최소 급여만 RETURN되지 어느 업무가 어떤 최소값을 가지는지를 알 수 없다.

 

1.7.2) Pairwise SUBQUERY

앞의 결과를 보면 알 수 있듯이 어떤 업무의 급여가 최소인지 업무와 최소 급여를 동시에 비교하여야 한다.

 

문제11) EMP 테이블에서 급여와 보너스가 부서 30에 있는 어떤 사원의 보너스와 급여에 일치하는 사원의 이름,부서번호,급여,보너스를 출력하여라.

SQL> SELECT ename,deptno,sal,comm

  2  FROM emp

  3  WHERE (sal,NVL(comm,-1)) IN (SELECT sal,NVL(comm,-1)

  4                                FROM emp

  5                                WHERE deptno = 30);

 

ENAME         DEPTNO       SAL      COMM

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

WARD              30      1250       500

MARTIN            30      1250      1400

TURNER            30      1500         0

ALLEN             30      1600       300

CLARK             10      2450

JAMES             30      2450

BLAKE             30      2850

 

7 rows selected.

 

문제12) 업무별로 최소 급여를 받는 사원의 정보를 사원번호,이름,업무,부서번호를 출력하여라. 단 업무별로 정렬하여라.

SQL> SELECT empno,ename,job,sal,deptno

  2  FROM emp

  3  WHERE (job,sal) IN (SELECT job,MIN(sal)

  4                       FROM emp

  5                       GROUP BY job)

  6  ORDER BY job;

 

EMPNO ENAME      JOB             SAL    DEPTNO

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

     7902 FORD       ANALYST        3000        20

     7788 SCOTT      ANALYST        3000        20

     7369 SMITH      CLERK           800        20

     7782 CLARK      MANAGER        2450        10

     7839 KING       PRESIDENT      5000        10

     7654 MARTIN     SALESMAN       1250        30

     7521 WARD       SALESMAN       1250        30

 

7 rows selected.

 

1.8 SUBQUERY에서의 NULL

NULL값을 비교하는 모든 조건은 NULL이다.

 

SQL> SELECT e.empno,e.ename,e.job,e.sal

  2  FROM emp e

  3  WHERE e.empno IN (SELECT m.mgr

  4                    FROM emp m);

 

EMPNO ENAME      JOB             SAL

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

     7566 JONES      MANAGER        2975

     7698 BLAKE      MANAGER        2850

     7782 CLARK      MANAGER        2450

     7788 SCOTT      ANALYST        3000

     7839 KING       PRESIDENT      5000

     7902 FORD       ANALYST        3000

 

6 rows selected.

 

위 문장의 SELECT 문장은 1명 이상으로부터 보고를 받을 수 있는 사원의 정보를 출력한 것이다. 그러면 말단 직원을 출력할 경우에는 SELECT 문장을 어떻게 기술해야 할까. 일반 사용자가 실수하기 쉬운 부분이다. 우선 IN대신 NOT IN을 사용하면 쉽게 해결될 것이라 생각한다. 그러나 여기에는 다음과 같은 문제점이 있다. 우선 다음의 SELECT문장을 보기 바란다.

 

SQL> SELECT e.empno,e.ename,e.job,e.sal

  2  FROM emp e

  3  WHERE e.empno NOT IN (SELECT m.mgr

  4                         FROM emp m);

 

no rows selected

 

위의 SELECT 문장의 결과 SUBQUERY에서 RETURN되는 값 중에는 NULL(KING MGR NULL이다)이 있다. NULL에 어떠한 연산을 하여도 모든 조건은 NULL이므로 전체 값이 존재하지 않는다고 RETURN한다. SUBQUERY의 결과 집합의 일부분으로서 NULL값은 IN연산자를 사용할 경우는 문제가 되지 않지만 NOT IN연산자를 사용하면 안된다.

 

Guidelines

SUBQUERY의 결과 집합의 일부분으로서 NULL값은 IN(= ANY) 연산자를 사용할 수 있다.그러나 NOT IN(!= ALL)연산자를 사용할 수 없다.

 

1.9 FROM절에서의 SUBQUERY

SUBQUERY FROM절에서도 사용 가능하다. 하나의 테이블에서 자료의 양이 많을 경우 FROM절에 테이블 전체를 기술하여 사용하면 효율이 떨어질 수 있다. 이런 경우 필요한 행과 열만 선택하여 FROM절에 기술하면 오라클 서버가 최적화 단계에서 효율적인 검색을 할 수 있다. 이처럼 FROM절에 기술한 SUBQUERY는 마치 VIEW와 같은 역할을 한다. 이런 VIEW INLINE VIEW라 한다.

 

문제13) EMP DEPT 테이블에서 업무가 MANAGER인 사원의 정보를 이름,업무,부서명,근무지를 출력하여라

SQL> SELECT e.ename,e.job,d.dname,d.loc

  2  FROM dept d,emp e

  3  WHERE job = 'MANAGER' AND e.deptno = d.deptno;

 

ENAME      JOB       DNAME          LOC

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

BLAKE      MANAGER   SALES          CHICAGO

CLARK      MANAGER   ACCOUNTING     NEW YORK

JONES      MANAGER   RESEARCH       DALLAS

SQL> SELECT e.ename,e.job,d.dname,d.loc

  2  FROM (SELECT ename,job,deptno

  3         FROM emp

  4         WHERE job = 'MANAGER') e, dept d

  5  WHERE e.deptno = d.deptno;

 

ENAME      JOB       DNAME          LOC

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

BLAKE      MANAGER   SALES          CHICAGO

CLARK      MANAGER   ACCOUNTING     NEW YORK

JONES      MANAGER   RESEARCH       DALLAS

 


◈ 연 습 문 제 ◈

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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


관련글 더보기