유형 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;