대덕인재/Oracle

[Oracle D-7] Delete 명령

꼬마버거 2025. 4. 9. 20:32

✅ 1. DELETE 기본 문법

 

 

DELETE FROM 테이블명 
WHERE 조건;
구성 요소설명
DELETE FROM 어떤 테이블에서 삭제할지 지정
WHERE 어떤 조건에 맞는 행(row)을 삭제할지 지정

 

✅ 2. 예제 테이블

MEMBER 테이블

MEM_ID                                   MEM_NAME                                  MEM_GRADE                   MEM_MILEAGE

 

A101 김민지 일반 3000
A102 박서준 VIP 8000
A103 이지은 일반 4000

 

✅ 3. 예제들

🎯 예제 1: 특정 회원 한 명 삭제 

DELETE FROM MEMBER
WHERE MEM_ID = 'A103';

→ A103 회원 한 명만 삭제됩니다.

 

🎯 예제 2: 일반 등급 회원 전부 삭제

DELETE FROM MEMBER
WHERE MEM_GRADE = '일반';

→ 일반 등급 회원 전체 삭제 (A101, A103 등)

 

⚠️ 예제 3: WHERE 절 없이 DELETE (주의!) 

DELETE FROM MEMBER;

 

👉 테이블 전체 데이터가 삭제됩니다! 😱 (행은 모두 사라지지만 테이블 구조는 남음)

 

 

✅ 4. DELETE vs TRUNCATE vs DROP 비교 

 

✅ 5. 서브쿼리를 사용한 DELETE

 

DELETE FROM MEMBER
WHERE MEM_ID IN (
    SELECT MEM_ID
    FROM MEMBER
    WHERE MEM_GRADE = '일반'
);

→ 일반 등급 회원들 삭제 (IN 절이나 EXISTS 절 등 다양하게 응용 가능)

 

장바구니에서 수량이 0인 상품 삭제

DELETE FROM CART
WHERE CART_QTY = 0;

 

장바구니에 담았지만 수량이 0인 상품은 의미 없으니 삭제

 

 

30일 이상 로그인하지 않은 회원 삭제

DELETE FROM MEMBER
WHERE LAST_LOGIN < SYSDATE - 30;

마지막 로그인 날짜가 30일 이전인 회원들을 삭제 (휴면 처리나 정리 작업 시 사용)

 

다른 테이블 조건을 참조해서 삭제 (서브쿼리)

🎯 장바구니에 상품이 존재하지 않는 경우 삭제

DELETE FROM CART
WHERE PROD_ID NOT IN (
    SELECT PROD_ID FROM PRODUCT
);

CART에 있는 상품이 PRODUCT 테이블에 없을 경우 삭제 (유령 데이터 제거)

JOIN을 이용한 삭제 (Oracle 스타일)]

Oracle은 일반적으로 JOIN만으로 직접 DELETE 하긴 어렵지만, **EXISTS나 IN**을 통해 우회적으로 처리합니다.

🎯 VIP가 아닌 회원의 장바구니 삭제

DELETE FROM CART
WHERE MEM_ID IN (
    SELECT MEM_ID FROM MEMBER
    WHERE MEM_GRADE != 'VIP'
);

VIP가 아닌 회원들의 장바구니 데이터를 삭제

 

날짜 조건을 이용한 정기 정리

DELETE FROM LOG_HISTORY
WHERE LOG_DATE < ADD_MONTHS(SYSDATE, -6);

6개월이 지난 로그 기록을 삭제 (로그 테이블 정리용)

'대덕인재 > Oracle' 카테고리의 다른 글

[Oracle D-8] 숫자함수  (0) 2025.04.11
[Oracle D-8] 테이블 기본 용어? (?????해야하나??)  (0) 2025.04.10
[Oracle D-6] 연산자  (0) 2025.04.08
[Oracle D-6] SELECT문  (0) 2025.04.08
[D-5] UPDATE 명령 (더써야함)  (0) 2025.04.07