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);
;