메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Oracle (토론 | 기여)님의 2025년 5월 27일 (화) 00:08 판
  1. 오라클 DELETE 문

개요

menu_book DELETE 문은 오라클 데이터베이스에서 테이블의 데이터 행을 제거하는 데 사용되는 DML(Data Manipulation Language) 명령어입니다. 조건에 맞는 특정 행들만 삭제하거나, 테이블의 모든 데이터를 삭제할 수 있습니다.


기본 구문

DELETE FROM table_name
[WHERE condition];

DELETE 문의 주요 특징

  • 테이블에서 행 단위로 데이터 삭제
  • WHERE 절로 삭제할 행 지정 (생략 시 전체 행 삭제)
  • 트랜잭션 제어 가능 (COMMIT 또는 ROLLBACK)
  • 삭제된 데이터는 FLASHBACK 기능으로 복구 가능 (일정 기간 내)

DELETE 사용 예제

조건부 삭제

-- 사원번호가 101인 사원 삭제
DELETE FROM employees
WHERE employee_id = 101;

서브쿼리를 이용한 삭제

-- 급여가 평균보다 낮은 사원 삭제
DELETE FROM employees
WHERE salary < (SELECT AVG(salary) FROM employees);

전체 데이터 삭제

-- employees 테이블의 모든 데이터 삭제
DELETE FROM employees;

고급 DELETE 기능

다중 테이블 삭제

-- 부서가 'IT'인 사원들 삭제
DELETE FROM employees
WHERE department_id IN (
  SELECT department_id 
  FROM departments 
  WHERE department_name = 'IT'
);

RETURNING 절 사용

-- 삭제된 행의 정보 반환
DELETE FROM employees
WHERE department_id = 10
RETURNING employee_id, last_name INTO :emp_id, :emp_name;

DELETE 성능 고려사항

인덱스 활용

  • WHERE 조건에 인덱스가 있는 컬럼 사용 시 성능 향상

대량 데이터 삭제

-- 대량 데이터 삭제 시分批 처리
BEGIN
  LOOP
    DELETE FROM large_table
    WHERE rownum <= 10000
    AND create_date < TO_DATE('2020-01-01', 'YYYY-MM-DD');
    
    EXIT WHEN SQL%ROWCOUNT = 0;
    COMMIT;
  END LOOP;
END;

TRUNCATE와의 차이점

특징 DELETE TRUNCATE
느림 | 매우 빠름
가능 | 불가능
안함 | 즉시 회수
발생 | 발생 안함
사용 가능 | 사용 불가

주의사항

  • WHERE 절 없이 실행하면 테이블의 모든 데이터가 삭제됨
  • 대량 데이터 삭제 시 트랜잭션 로그 과다 생성 가능
  • 외래키 제약조건이 있는 경우 참조 무결성 위반 가능성
  • 삭제 전 데이터 백업 권장

관련 항목