더북(TheBook)

유형 3

입력

    SELECT employee_id, emp_name, job_id
      FROM employees
     WHERE (employee_id, job_id ) IN ( SELECT employee_id, job_id
                                        FROM job_history);

결과

    EMPLOYEE_ID EMP_NAME          JOB_ID
    ----------- ----------------- ------------
    200         Jennifer Whalen   AD_ASST
    176         Jonathon Taylor   SA_REP

    2개의 행이 선택됨.

위 쿼리는 job_history 테이블에 있는 employee_id, job_id 두 값과 같은 건을 사원 테이블에서 찾는 쿼리로 서브 쿼리는 메인 쿼리와 연관성이 없다. 그리고 동시에 2개 이상의 컬럼 값이 같은 건을 찾고 있다. 물론 IN 앞에 있는 컬럼 개수와 서브 쿼리에서 반환하는 컬럼 개수 그리고 유형은 같아야 한다.

서브 쿼리는 SELECT문 뿐만 아니라 다음과 같이 UPDATE문, DELETE문에서도 사용할 수 있다.

<전 사원의 급여를 평균 금액으로 갱신>

입력

    UPDATE employees
       SET salary = ( SELECT AVG(salary)
                        FROM employees );

결과

    107개 행 이(가) 업데이트되었습니다.

<평균 급여보다 많이 받는 사원 삭제>

입력

    DELETE employees
     WHERE salary >= ( SELECT AVG(salary)
                         FROM employees );

결과

    51개 행 이(가) 삭제되었습니다.

사원 테이블을 원 상태로 되돌려 놓도록 ROLLBACK 문을 실행하자.

입력

    ROLLBACK;
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.