[SQL] 087. 서브 쿼리를 사용하여 데이터 삭제하기

Updated:

초보자를 위한 SQL 200제 교재를 토대로 공부한 내용입니다.

오라클 SQL을 기반으로 합니다.

실습에 사용한 테이블은 정보문화사 홈페이지에서 받을 수 있습니다.


[예시]

이번 챕터에선 서브 쿼리를 이용해 데이터를 삭제해본다.

DELETE에서 WHERE절 조건에 서브 쿼리를 사용한다.

첫 번째로 SCOTT의 월급보다 월급이 높으면 행을 삭제한다.

두 번째로 특정 부서의 사람이 해당 부서의 평균 월급보다 월급이 높으면 삭제한다.

-- 기본 옵션으로 사용
-- AUTOCOMMIT 끄기
SET AUTOCOMMIT OFF;

-- 날짜 출력 포맷 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'RRRR-MM-DD';
-- SCOTT의 월급보다 큰 경우 삭제
DELETE FROM EMP
WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME = 'SCOTT');

-- 각 부서별 평균월급보다 큰 경우 삭제
-- 행 단위로 처리되어 처음 부서 10인 사람이면 서브 쿼리가 부서 10의 평균 월급으로 계산
DELETE FROM EMP A
WHERE SAL > (SELECT AVG(SAL) 
             FROM EMP B 
             WHERE B.DEPTNO = A.DEPTNO);

-- 테이블 확인
SELECT *
FROM EMP;

[결과]

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7654 MARTIN SALESMAN 7698 1981-09-10 1250 1400 30
7844 TURNER SALESMAN 7698 1981-08-21 1500 0 30
7900 JAMES CLERK 7698 1981-12-11 950   30
7521 WARD SALESMAN 7698 1981-02-23 1250 500 30
7369 SMITH CLERK 7902 1980-12-11 800   20
7876 ADAMS CLERK 7788 1983-01-15 1100   20
7934 MILLER CLERK 7782 1982-01-11 1300   10

Tags:

Categories:

Updated:

Leave a comment