[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 |
Leave a comment