SQL-내장함수 & 서브쿼리

11 분 소요

DECODE 함수

  • 형식 → DECODE ( 컬럼명, 비교데이터1, 결과데이터1, 비교데이터2, 결과데이터2, 비교데이터3, 결과데이터3)

  • 문제) 사원들의 사원번호, 사원명, 부서번호, 부서명 , 사원번호에 대한 홀수,짝수 를 출력하시오.

      SELECT EMPNO, ENAME, DEPTNO, DECODE(DEPTNO, 10, 'ACCOUNTING', 20, 'RESEARCH', 30, 'SALES') AS 부서명 FROM EMP;
           EMPNO ENAME                    DEPTNO 부서명
      ---------- -------------------- ---------- --------------------
            7369 SMITH                        20 RESEARCH
            7499 ALLEN                        30 SALES
            7521 WARD                         30 SALES
            7566 JONES                        20 RESEARCH
            7654 MARTIN                       30 SALES
            7698 BLAKE                        30 SALES
            7782 CLARK                        10 ACCOUNTING
            7788 SCOTT                        20 RESEARCH
            7839 KING                         10 ACCOUNTING
        
      SELECT EMPNO, ENAME, DEPTNO, DECODE(DEPTNO, 10, 'ACCOUNTING', 20, 'RESEARCH', 30, 'SALES') AS 부서명, DECODE(MOD(EMPNO,2), 0, '짝수', 1, '홀수') FROM EMP;
           EMPNO ENAME                    DEPTNO 부서명               DECODE(MOD(E
      ---------- -------------------- ---------- -------------------- ------------
            7369 SMITH                        20 RESEARCH             홀수
            7499 ALLEN                        30 SALES                홀수
            7521 WARD                         30 SALES                홀수
            7566 JONES                        20 RESEARCH             짝수
            7654 MARTIN                       30 SALES                짝수
            7698 BLAKE                        30 SALES                짝수
            7782 CLARK                        10 ACCOUNTING           짝수
            7788 SCOTT                        20 RESEARCH             짝수
    

CASE 함수

  • 형식 →CASE WHEN 조건식1 THEN 결과데이터1 WHEN 조건식2 THEN 결과데이터2 WHEN 조건식3 THEN 결과데이터3

  • 문제) 사원들의 사원번호, 사원명, 부서번호, 부서명 , 사원번호에 대한 홀수,짝수 를 출력하시오.
      SELECT EMPNO, ENAME, DEPTNO,CASE 
      WHEN DEPTNO=10 THEN 'ACCOUNTING'
      WHEN DEPTNO=20 THEN 'RESEARCH'
      WHEN DEPTNO=30 THEN 'SALES'
      ELSE 'OPERATIONS' END AS 부서명,CASE 
      WHEN MOD(EMPNO,2)=0 THEN '짝수' 
      ELSE '홀수' END AS 홀짝 FROM EMP;
           EMPNO ENAME                    DEPTNO 부서명               홀짝
      ---------- -------------------- ---------- -------------------- ------------
            7369 SMITH                        20 RESEARCH             홀수
            7499 ALLEN                        30 SALES                홀수
            7521 WARD                         30 SALES                홀수
            7566 JONES                        20 RESEARCH             짝수
            7654 MARTIN                       30 SALES                짝수
            7698 BLAKE                        30 SALES                짝수
            7782 CLARK                        10 ACCOUNTING           짝수
    

    JOIN 함수

  • 한개 이상의 테이블에서 데이터를 조회하기 위해 사용.
  • 두개 이상의 테이블을 참조해서 데이터를 검색.
  • from 뒤에 두개 이상의 테이블을 명시 .

  • 문제) SCOTT사원이 근무하는 부서의 부서번호와 부서명, 부서위치를 출력하시오.

  • 문제) 아래와 같이 ‘SCOTT’사원에 대해 조회하고 그 결과를 출력하시오. SELECT ENAME, EMP.DEPTNO, DNAME, LOC FROM EMP, DEPT;
    • –> 두 테이블에 공통적으로 존재하는 컬럼명에만 테이블 소속을 명시해 주면 됨!!
    • –> 특별한 조건 없이 조회를 하면 곱의 형태로 결과행이 출력(CROSS 조인)
    • –> EMP(14행)X DEPT(4행)= 56행이 출력됨
    SELECT ENAME, EMP.DEPTNO, DNAME, LOC FROM EMP, DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO;
    --> 두 테이블이 갖는 공통적인 컬럼비교 : EQUI조인! 
    --> 결국 14행이 출력됨
    ENAME                    DEPTNO DNAME                        LOC
    -------------------- ---------- ---------------------------- ------------
    CLARK                        10 ACCOUNTING                   NEW YORK
    KING                         10 ACCOUNTING                   NEW YORK
    MILLER                       10 ACCOUNTING                   NEW YORK
    JONES                        20 RESEARCH                     DALLAS
    FORD                         20 RESEARCH                     DALLAS
    ADAMS                        20 RESEARCH                     DALLAS
    SMITH                        20 RESEARCH                     DALLAS
    SCOTT                        20 RESEARCH                     DALLAS
    WARD                         30 SALES                        CHICAGO
    
    // 주의사항 : 테이블에 별명을 지정했을 경우 SELECT WHERE절에서는 별명만 사용해야함.
    
    SELECT EMPNO, ENAME, E.DEPTNO, DNAME, LOC FROM EMP E, DEPT D WHERE ENAME ='SCOTT' AND E.DEPTNO=D.DEPTNO;
         EMPNO ENAME                    DEPTNO DNAME                        LOC
    ---------- -------------------- ---------- ---------------------------- -------
          7788 SCOTT                        20 RESEARCH                     DALLAS
  • select ename||’사원은 ‘||e.deptno||’번 부서에 근무하고 부서명은 ‘||dname||’이고 위치는 ‘||loc from emp e, dept d where ename = ‘SCOTT’ and e.deptno=d.deptno; –> SCOTT사원은 20번 부서에 근무하고 부서명은 RESEARCH이고 위치는 DALLAS

EQUI JOIN

  • 조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치하는 행을 연결하여 결과를 생성하는 조인.
  • 참고: select * from emp,dept; ===> 특별한 조건없이 두 테이블을 곱(14행 * 4행)의 형태로 출력: CROSS JOIN

  • 문제) ‘NEW YORK’에 근무하는 사원의 이름과 급여를 출력하시오.
      select ename, sal from emp, dept where loc='NEW YORK' and emp.deptno = dept.deptno;
      ENAME                       SAL
      -------------------- ----------
      CLARK                      2450
      KING                       5000
      MILLER                     1300
    
  • 문제) ACCOUNTING부서 소속사원들의 이름과 입사일(yyyy/mm/dd)을 출력하시오.
      SELECT ENAME, TO_CHAR(HIREDATE, 'YYYY/MM/DD') FROM EMP, DEPT WHERE DNAME='ACCOUNTING' AND EMP.DEPTNO = DEPT.DEPTNO;
      ENAME                TO_CHAR(HIREDATE,'YY
      -------------------- --------------------
      CLARK                1981/06/09
      KING                 1981/11/17
      MILLER               1982/01/23
    
  • 문제) 직급이 MANAGER인 사원의 이름, 부서명을 출력하시오.
      SELECT ENAME, DNAME FROM EMP, DEPT WHERE JOB='MANAGER' AND EMP.DEPTNO = DEPT.DEPTNO;
      ENAME                DNAME
      -------------------- ----------------------------
      CLARK                ACCOUNTING
      JONES                RESEARCH
      BLAKE                SALES
    

    Non-Equi JOIN

  • 특정 범위내에 있는 값을 조회하기 위해 비교연산자를 사용

  • 문제) 각 사원의 사원번호, 사원명, 급여, 급여등급을 출력하시오.
      SELECT EMPNO, ENAME, SAL, GRADE FROM EMP, SALGRADE WHERE SAL BETWEEN LOSAL AND HISAL;
           EMPNO ENAME                       SAL      GRADE
      ---------- -------------------- ---------- ----------
            7369 SMITH                       800          1
            7900 JAMES                       950          1
            7876 ADAMS                      1100          1
            7521 WARD                       1250          2
            7654 MARTIN                     1250          2
            7934 MILLER                     1300          2
            7844 TURNER                     1500          3
            7499 ALLEN                      1600          3
            7782 CLARK                      2450          4
            7698 BLAKE                      2850          4
    
  • 문제) ALLEN사원의 사원번호, 사원명, 급여, 급여등급을 출력하시오.
      SELECT EMPNO, ENAME, SAL, GRADE FROM EMP, SALGRADE WHERE SAL BETWEEN LOSAL AND HISAL AND ENAME='ALLEN';
           EMPNO ENAME                       SAL      GRADE
      ---------- -------------------- ---------- ----------
            7499 ALLEN                      1600          3      
    

    Self JOIN

  • 마치 같은 테이블이 두개인 것처럼 자기 자신테이블과 조인하는 것.
  • 구하고자 하는 데이터가 같은 행에 존재하지 않을 때

  • 문제) SCOTT사원의 사원번호, 사원명, 급여, 직속상사명을 출력하시오.
      SELECT E1.EMPNO, E1.ENAME AS 내사원명, E1.SAL, E2.ENAME AS 직속상사명 FROM EMP E1, EMP E2 WHERE E1.MGR=E2.EMPNO AND E1.ENAME='SCOTT';
           EMPNO 내사원명                    SAL 직속상사명
      ---------- -------------------- ---------- --------------------
            7788 SCOTT                      3000 JONES
    
  • 문제) 매니저(직속상사)가 KING인 사원들의 이름과 직급을 출력.
      SELECT E1.ENAME, E1.JOB FROM EMP E1, EMP E2 WHERE E1.MGR=E2.EMPNO AND E2.ENAME='KING';
      ENAME                JOB
      -------------------- ------------------
      BLAKE                MANAGER
      JONES                MANAGER
      CLARK                MANAGER
    
  • 문제) SCOTT사원과 동일한 근무지(부서)에서 근무하는 사원(동료사원)의 이름을 출력하시오.
      SELECT E2.ENAME FROM EMP E1, EMP E2 WHERE E1.DEPTNO = E2.DEPTNO AND E1.ENAME='SCOTT'AND E2.ENAME != 'SCOTT';
      ENAME
      --------------------
      SMITH
      JONES
      ADAMS
      FORD
    

    Outer JOIN

  • 테이블 조인중 한쪽 테이블에 존재하지 않은 데이터로 인해서 출력되지 않는 행을 출력하고 싶을 때 사용. → ‘(+)’ 기호 사용. → 모자라는 테이블에 기술

  • 문제) 각 사원의 이름과 그 사원의 직속 상사이름을 출력하시오.
      SELECT E1.ENAME AS 사원명, E2.ENAME AS 상사이름 FROM EMP E1, EMP E2 WHERE E1.MGR= E2.EMPNO(+);
      사원명               상사이름
      -------------------- --------------------
      FORD                 JONES
      SCOTT                JONES
      JAMES                BLAKE
      TURNER               BLAKE
      MARTIN               BLAKE
      WARD                 BLAKE
      ALLEN                BLAKE
      MILLER               CLARK
      ADAMS                SCOTT
      CLARK                KING
      BLAKE                KING
      JONES                KING
      SMITH                FORD
      KING
    
  • 문제) 각 사원의 이름과 부서번호, 부서명, 부서위치를 출력하시오 (사원이 근무하지 않는 비어있는 부서에 대한 정보도 출력하고 싶다!)
      SELECT ENAME, DEPT.DEPTNO, DNAME, LOC FROM EMP, DEPT WHERE EMP.DEPTNO(+)=DEPT.DEPTNO;
      ENAME                    DEPTNO DNAME                        LOC
      -------------------- ---------- ---------------------------- -------------------
      CLARK                        10 ACCOUNTING                   NEW YORK
      KING                         10 ACCOUNTING                   NEW YORK
      MILLER                       10 ACCOUNTING                   NEW YORK
      JONES                        20 RESEARCH                     DALLAS
      FORD                         20 RESEARCH                     DALLAS
      ADAMS                        20 RESEARCH                     DALLAS
      SMITH                        20 RESEARCH                     DALLAS
      SCOTT                        20 RESEARCH                     DALLAS
      WARD                         30 SALES                        CHICAGO
      TURNER                       30 SALES                        CHICAGO
      ALLEN                        30 SALES                        CHICAGO
      JAMES                        30 SALES                        CHICAGO
      BLAKE                        30 SALES                        CHICAGO
      MARTIN                       30 SALES                        CHICAGO
                                   40 OPERATIONS                   BOSTON
    

ANSI Join(표준 조인)

  • FROM EMP [조인종류] JOIN DEPT → 이런 식으로 콤마를 안씀.

1. Inner Join

  • 테이블 사이에 inner join사용 / 동등 조건식은 ON(조건절) 뒤에 사용.

  • where절을 추가하는 것이 가능.
  • on절은 반드시 추가!!
  • on절에 동등비교와 추가적인 조건식을 기술 가능.

문제) 전체 사원에 대한 사원번호, 사원명, 부서명을 출력.

    SELECT EMPNO, ENAME, DNAME FROM EMP INNER JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;
         EMPNO ENAME                DNAME
    ---------- -------------------- ----------------------------
          7782 CLARK                ACCOUNTING
          7839 KING                 ACCOUNTING
          7934 MILLER               ACCOUNTING
          7566 JONES                RESEARCH
          7902 FORD                 RESEARCH
          7876 ADAMS                RESEARCH
          7369 SMITH                RESEARCH
          7788 SCOTT                RESEARCH
          7521 WARD                 SALES
          7844 TURNER               SALES
          7499 ALLEN                SALES
          7900 JAMES                SALES
          7698 BLAKE                SALES
          7654 MARTIN               SALES
  • 문제) ‘JAMES’사원에 대한 사원번호, 사원명, 부서명을 출력하시오.
      SELECT EMPNO, ENAME, DNAME FROM EMP INNER JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO WHERE ENAME='JAMES';
           EMPNO ENAME                DNAME
      ---------- -------------------- ----------------------------
            7900 JAMES                SALES
    
  • Inner Join에 USING절 사용하기
    • 형식 : USING (공통컬럼명)
    • ON EMP.DEPTNO=DEPT.DEPTNO → 이 코드를 짧게 줄여주는 효과
        SELECT EMPNO, ENAME, DNAME FROM EMP INNER JOIN DEPT USING (DEPTNO) WHERE ENAME='JAMES';
        EMPNO ENAME                DNAME
        ---------- -------------------- ----------------------------
         7900 JAMES                SALES
      

2. Natural Join

  • 양쪽 테이블에 동일한 이름의 컬럼이 존재한다면 자동 매핑을 해주는 조인. (DEPTNO)
  • 위의 INNER JOIN보다 훨씬 간편함
  • 문제) ADAMS의 사원번호, 사원명, 부서명을 출력하시오.
      SELECT EMPNO, ENAME, DNAME FROM EMP NATURAL JOIN DEPT WHERE ENAME='ADAMS';
           EMPNO ENAME                DNAME
      ---------- -------------------- ----------------------------
            7876 ADAMS                RESEARCH
    

3. Outer Join

  • 형식) select 컬럼명 from 테이블명1 (LEFT RIGHT FULL) [OUTER] JOIN 테이블명2;
  • 조건절은 ON!!
  • 오라클 OUTER조인의 (+) 반대방향에 LEFT 혹은 RIGHT

  • 문제) 각 사원의 이름과 그 사원의 직속상사명을 출력하시오.(KING사원의 정보출력)
      SELECT E1.ENAME AS 사원명, E2.ENAME AS 직속상사명 FROM EMP E1 LEFT JOIN EMP E2 ON E1.MGR = E2.EMPNO;
      사원명               직속상사명
      -------------------- --------------------
      FORD                 JONES
      SCOTT                JONES
      JAMES                BLAKE
      TURNER               BLAKE
      MARTIN               BLAKE
      WARD                 BLAKE
      ALLEN                BLAKE
      MILLER               CLARK
      ADAMS                SCOTT
      CLARK                KING
      BLAKE                KING
      JONES                KING
      SMITH                FORD
      KING
    
  • 문제) 각 사원의 이름과 부서번호, 부서명, 부서위치를 출력하시오.(40번 부서 정보 출력)
    SELECT ENAME, DEPTNO, DNAME, LOC FROM EMP RIGHT JOIN DEPT USING (DEPTNO);
    
    ENAME                    DEPTNO DNAME                        LOC
    -------------------- ---------- ---------------------------- -----------------
    CLARK                        10 ACCOUNTING                   NEW YORK
    KING                         10 ACCOUNTING                   NEW YORK
    MILLER                       10 ACCOUNTING                   NEW YORK
    JONES                        20 RESEARCH                     DALLAS
    FORD                         20 RESEARCH                     DALLAS
    ADAMS                        20 RESEARCH                     DALLAS
    SMITH                        20 RESEARCH                     DALLAS
    SCOTT                        20 RESEARCH                     DALLAS
    WARD                         30 SALES                        CHICAGO
    TURNER                       30 SALES                        CHICAGO
    ALLEN                        30 SALES                        CHICAGO
    JAMES                        30 SALES                        CHICAGO
    BLAKE                        30 SALES                        CHICAGO
    MARTIN                       30 SALES                        CHICAGO
                                 40 OPERATIONS                   BOSTON

Sub Query★★

  • 특정 테이블에서 검색된 결과를 다른 테이블에 전달하여 새로운 결과를 검색 할 때 사용.
  • 검색된 결과가 1행 1열의 데이터값만 하나 가질 때 서브쿼리사용→(SELECT DEPTNO FROM EMP WHERE ENAME=’JAMES’) 이게 서브퀴리인데 딱 하나의 30이라는 값만 가짐.

  • 문제) JAMES사원이 근무하는 부서이름을 출력
      SELECT DNAME FROM DEPT WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME='JAMES');
      DNAME
      ----------------------------
      SALES
    
  • 문제) FORD사원과 동일한 직책을 가진 사원에 대해 사원번호, 사원명, 급여, 직책을 출력.
      SELECT EMPNO, ENAME, SAL, JOB FROM EMP WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME='FORD');
           EMPNO ENAME                       SAL JOB
      ---------- -------------------- ---------- ------------------
            7788 SCOTT                      3000 ANALYST
            7902 FORD                       3000 ANALYST
    
  • 문제) MARTIN사원의 급여와 동일하거나 더 많이 받는 사원의 사원명, 급여를 출력
      SELECT ENAME, SAL FROM EMP WHERE SAL >= (SELECT SAL FROM EMP WHERE ENAME='MARTIN');
      ENAME                       SAL
      -------------------- ----------
      ALLEN                      1600
      WARD                       1250
      JONES                      2975
      MARTIN                     1250
      BLAKE                      2850
      CLARK                      2450
      SCOTT                      3000
      KING                       5000
      TURNER                     1500
      FORD                       3000
      MILLER                     1300
    
  • 문제) DALLAS에서 근무하는 사원의 이름, 부서번호를 출력.
      SELECT ENAME, DEPTNO FROM EMP WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE LOC='DALLAS');
      ENAME                    DEPTNO
      -------------------- ----------
      SMITH                        20
      JONES                        20
      SCOTT                        20
      ADAMS                        20
      FORD                         20
    
  • 문제) SALES부서에서 근무하는 모든 사원의 이름과 급여, 부서번호를 출력.
      SELECT ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME='SALES');
      ENAME                       SAL     DEPTNO
      -------------------- ---------- ----------
      ALLEN                      1600         30
      WARD                       1250         30
      MARTIN                     1250         30
      BLAKE                      2850         30
      TURNER                     1500         30
      JAMES                       950         30
    
  • 문제) 자신의 직속 상사가 KING인 사원의 이름과 급여, 직속상사의 사원번호를 출력.
      SELECT ENAME, SAL, MGR FROM EMP WHERE MGR= (SELECT EMPNO FROM EMP WHERE ENAME='KING');
      ENAME                       SAL        MGR
      -------------------- ---------- ----------
      JONES                      2975       7839
      BLAKE                      2850       7839
      CLARK                      2450       7839
    
  • 문제) 평균급여보다 많은 급여를 받는 사원들의 사번, 사원명, 급여를 출력(급여 내림차순)
      SELECT EMPNO, ENAME, SAL FROM EMP WHERE SAL >= (SELECT AVG(SAL) FROM EMP) ORDER BY 3;
           EMPNO ENAME                       SAL
      ---------- -------------------- ----------
            7782 CLARK                      2450
            7698 BLAKE                      2850
            7566 JONES                      2975
            7902 FORD                       3000
            7788 SCOTT                      3000
            7839 KING                       5000
    
  • 문제) 10번 부서의 사원 중 전체(사원) 최대급여를 받은 사원과 동일한 급여를 받는 사원의 사원번호와 사원명을 출력.
      SELECT EMPNO, ENAME FROM EMP WHERE SAL = (SELECT MAX(SAL) FROM EMP) AND DEPTNO=10;
           EMPNO ENAME
      ---------- --------------------
            7839 KING
    
  • 문제) BLAKE와 같은 부서에 있는 사원들의 이름과 입사일자, 부서번호를 출력.
      SELECT ENAME, HIREDATE, DEPTNO FROM EMP WHERE DEPTNO=(SELECT DEPTNO FROM EMP WHERE ENAME='BLAKE');
      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
    

단일 행 서브쿼리

  • select결과행이 하나의 행인 서브쿼리
  • 하나의 행만 검색하여 그 결과를 메인 쿼리에 보내는 것.
  • 그룹함수

다중 행 서브쿼리

  • 서브쿼리의 결과행이 여러개(2개행 이상)
  • 서브쿼리에서 반환되는 결과가 하나이상의 행일 때 사용하는 서브쿼리.
  • 반드시 다중 행 연산자(Multiple Row Operator)와 함께 사용.

다중 행 연산자

  • IN : 메인쿼리의 비교조건이 서브쿼리의 결과중에서 하나라도 일치하면 참.
  • 가장 많이 쓰임.

  • ANY,SOME : 메인쿼리의 비교조건이 서브쿼리의 결과와 하나이상 일치하면 참
  • ALL : 메인쿼리의 비교조건이 서브쿼리의 결과와 모든값이 일치하면 참.
  • any,all ==> ‘>’ ‘<’와 함께 사용.

  • EXISTS: 메인쿼리의 비교조건이 서브쿼리의 결과중에서 만족하는 값이 하나라도 존재하면 참.
      select *
          from dept
          where  exists (select *    //서브쿼리 결과가 1 이상이면 true
                         from emp);
                                           
          select *
          from dept
          where  exists (select ename    //서브쿼리 결과가 1 이상이면 true
                         from emp
                         where empno=7788); 
                                          
          select *
          from dept
          where  exists (select ename    //서브쿼리 결과가 1 이상이면 true
                         from emp
                         where empno=9000);
    
  • 문제) 급여를 3000 이상 받는 사원이 소속된 부서와 동일한 부서에서 근무하는 사원들의 사원명, 급여, 부서번호를 출력하시오.
      SELECT ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM EMPWHERE SAL>=3000);
      ENAME                       SAL     DEPTNO
      -------------------- ---------- ----------
      FORD                       3000         20
      ADAMS                      1100         20
      SCOTT                      3000         20
      JONES                      2975         20
      SMITH                       800         20
      MILLER                     1300         10
      KING                       5000         10
      CLARK                      2450         10
    
  • 문제) 부서번호가 30번인 사원들 중 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사원명, 급여를 출력하시오. (ALL) - 모두 만족
      SELECT ENAME, SAL FROM EMP WHERE SAL > ALL (SELECT SAL FROM EMP WHERE DEPTNO=30);
      ENAME                       SAL
      -------------------- ----------
      JONES                      2975
      SCOTT                      3000
      FORD                       3000
      KING                       5000
    

서브쿼리 문제풀어보기

  • 문제1) SCOTT와 급여가 동일하거나 더 많이 받는 사원의 이름과 급여출력
      SELECT ENAME, SAL FROM EMP WHERE SAL >= (SELECT SAL FROM EMP WHERE ENAME='SCOTT') AND ENAME != 'SCOTT';
      ENAME                       SAL
      -------------------- ----------
      KING                       5000
      FORD                       3000
    
  • 문제2) 직급(job)이 사원(CLERK)인 사람이 속한 부서의 부서번호와 부서명,부서위치를 출력
      SELECT DEPTNO, DNAME, LOC FROM DEPT WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE JOB = 'CLERK');
          DEPTNO DNAME                        LOC
      ---------- ---------------------------- --------------------------
              10 ACCOUNTING                   NEW YORK
              20 RESEARCH                     DALLAS
              30 SALES                        CHICAGO
    
  • 문제3) 사원명에 ‘T’를 포함하고 있는 사원들과 같은 부서에서 근무하고 있는 사원의 사원번호와 이름을 출력
      SELECT EMPNO, ENAME FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHEREENAME LIKE '%T%');
           EMPNO ENAME
      ---------- --------------------
            7902 FORD
            7876 ADAMS
            7788 SCOTT
            7566 JONES
            7369 SMITH
            7900 JAMES
            7844 TURNER
            7698 BLAKE
            7654 MARTIN
            7521 WARD
            7499 ALLEN
    
  • 문제4) 부서위치가 DALLAS인 모든 사원의 이름, 부서번호를 출력
      SELECT ENAME, DEPTNO FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE LOC = 'DALLAS');
      ENAME                    DEPTNO
      -------------------- ----------
      SMITH                        20
      JONES                        20
      SCOTT                        20
      ADAMS                        20
      FORD                         20
    
  • 문제5) SALES부서의 모든 사원의 이름과 급여출력
      SELECT ENAME, SAL FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME='SALES');
      ENAME                       SAL
      -------------------- ----------
      ALLEN                      1600
      WARD                       1250
      MARTIN                     1250
      BLAKE                      2850
      TURNER                     1500
      JAMES                       950
    
  • 문제6) KING에게 보고하는 모든 사원의 이름과 급여를 출력.
      SELECT ENAME, SAL FROM EMP WHERE MGR= (SELECT EMPNO FROM EMP WHERE ENAME='KING');
      ENAME                       SAL
      -------------------- ----------
      JONES                      2975
      BLAKE                      2850
      CLARK                      2450
    
  • 문제7) 자신의 급여가 평균급여보다 많고 이름에 S가 들어가는 사원과 동일한 부서에서 근무하는 모든 사원의 사원번호, 사원명, 급여 출력.
      SELECT EMPNO, ENAME, SAL FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP) AND ENAME LIKE '%S%');
           EMPNO ENAME                       SAL
      ---------- -------------------- ----------
            7902 FORD                       3000
            7876 ADAMS                      1100
            7788 SCOTT                      3000
            7566 JONES                      2975
            7369 SMITH                       800
    

카테고리:

업데이트:

댓글남기기