Language/Oracle
[Oracle] SQL 서브 쿼리_03 : SUBQUERY 사용한 DELETE
생각하는 감쟈🥔
2024. 3. 28. 15:59
3. SUBQUERY을 사용한 DELETE
(사용형식)
DELETE FROM 테이블명
WHERE 조건
- '조건'에 서브쿼리가 사용된 경우
사용예) 사원테이블에 퇴직처리를 위하여 RETIRE 테이블을 생성하시오
테이블 명 : RETIRE
-----------------------------------------------------
컬럼명 타입 기본값 PK.FK
-----------------------------------------------------
EMPLOYEE_ID NUMBER(6) PK&FK
DEPARTMENT_ID NUMBER(4) FK
JOB_ID VARCHAR2(10) FK
RETIRE_DATE DATE SYSDATE
-----------------------------------------------------
행단위로 삭제하기 때문에 DELETE FROM 사이에는 아무것도 나올 수 없음
--지금 만든 현재 트리거 TG_EMP_DELETE 생성되어지는 이미 존재하는 트리거 이름이다 하면 덮어씌움
CREATE OR REPLACE TRIGGER TG_EMP_DELETE
BEFORE DELETE ON EMPLOYEES
FOR EACH ROW --트리거를 실행하시오
BEGIN
INSERT INTO RETIRE
VALUES(:OLD.EMPLOYEE_ID, :OLD.DEPARTMENT_ID, :OLD.JOB_ID, SYSDATE); --OLD: 삭제 대상 행
END;
사용예) 사원테이블에서 입사일리 2017년 5월 이전인 사원들을 일괄 퇴직 처리하시오...
(서브쿼리 : 사원테이블에서 입사일 이 2017년 5월 이전인 사람들)
SELECT EMPLOYEE_ID
FROM EMPLOYEES
WHERE HIRE_DATE <= TO_DATE('20170630')
AND EMPLOYEE_ID NOT IN(SELECT MANAGER_ID
FROM DEPARTMENTS);
;