본문 바로가기
DataBase/MsSql

데이터베이스 DELETE DML 사용 방법 및 예제

by 아우럼 2024. 3. 18.
반응형

DELETE는 테이블에 입력된 자료를 삭제하기 위한 DML 문으로 보통 database TABLE의 데이터를 삭제할 때 DELETE 문을 사용합니다.

DELETE DML 기본 구조

FROM 절 사용.

DELETE
FROM [TABLE 명]
WHERE [조건문];

FROM 절 생략한 후 삭제.

DELETE [TABLE 명]
WHERE [조건문];

DELETE DML 문 활용 예시

기본 구조로 TABLE 지우는 방법.

질문: UserInfoForDelete 테이블 내용을 모두 DELETE 해주세요.

 

-- 샘플
USE sampleDB;
DROP TABLE IF EXISTS UserInfoForDelete;
CREATE TABLE UserInfoForDelete (
    UserId int NOT NULL,
    UserNm varchar(255),
    UserAge  int
);

insert into  UserInfoForDelete(UserId,UserNm,UserAge) 
values
('202401','kim',60),
('202402','lee',84),
('202403','park',90),
('202404','moon',65),
('202405','young',35),
('202406','cho',45)


USE sampleDB;
DROP TABLE IF EXISTS BoardJoinDelete;
CREATE TABLE BoardJoinDelete (
    BoardNo int NOT NULL,
    BoardTitle varchar(255),
    UserId  int
);
 
insert into  BoardJoinDelete(BoardNo,BoardTitle,UserId) 
values
(1,'seoul',202401),
(2,'busun',202402), 
(3,'inchen',202404)

-- 1. 기본 구조로 TABLE 지우는 방법.
-- Data 확인
SELECT * FROM UserInfoForDelete;
-- Data 삭제
delete FROM UserInfoForDelete;
-- Data 확인
SELECT * FROM UserInfoForDelete;

조건 없이 삭제하는 방법. 매우 위험한 작업니다.

다른 테이블과 조인하여 DELETE 하는 방법.

질문: UserInfoForDelete의 등록된 아이디들을 BoardJoinDelete DELETE 하세요.

 

-- 2. 다른 테이블과 조인하여 DELETE 하는 방법.

-- 예제1
DELETE BD
	FROM BoardJoinDelete BD  
	JOIN UserInfoForDelete UD
	ON BD.UserId = UD.UserId

-- 예제2
DELETE BoardJoinDelete
	FROM BoardJoinDelete BD  
	JOIN UserInfoForDelete UD
	ON BD.UserId = UD.UserId;

 

다른 테이블과 조인하여 DELETE 하는 방법 입니다.

서브쿼리를 사용하여 DELETE 하는 방법.

질문: Sub 쿼리를 이용하여 UserInfoForDelete의 UserId가 '202401' 회원의 게시판 자료를 DELETE 하세요.

 

-- 3. 서브쿼리를 사용하여 DELETE 하는 방법.

-- 예제1
DELETE 
	FROM BoardJoinDelete
	WHERE UserId IN (
                   SELECT UserId
                     FROM UserInfoForDelete a
                     WHERE a.UserId ='202401'
					);
-- 예제2
DELETE 
	FROM BoardJoinDelete 
	WHERE EXISTS ( 
                SELECT *
                FROM UserInfoForDelete a 
                WHERE a.UserId ='202401' 
                AND A.UserId = BoardJoinDelete.UserId
                );

 

서브쿼리를 사용하여 DELETE 하는 방법 입니다.

TOP을 사용하여 삭제되는 행 수 제한해서 삭제하는 방법.

질문: UserInfoForDelete의 2건만 Top을 이용하여 삭제하세요.

DELETE 문에 TOP(n) 절을 사용하면 n개의 행을 임의로 선택하여 삭제 작업을 할 수 있습니다.

 

-- 4. TOP를 사용하여 삭제되는 행 수 제한해서 삭제하는 방법.
DELETE TOP(2)
  FROM UserInfoForDelete
  WHERE UserId LIKE '2024%'

 

TOP(n) 절을 사용하면 n개의 행을 임의로 선택하여 삭제.

 

DELETE 문에 OUTPUT을 이용하여 삭제된 데이터 확인.

질문: 삭제된 data를 테이블 변수에 넣어서 삭제 후 정확하게 삭제했는지 확인해 보세요.

 

-- 5. DELETE 문에 OUTPUT을 이용하여 삭제된 데이터 확인.
 
-- 테이블 변수 선언
DECLARE @UserInfoForDeleteVar table (  
	UserId int NOT NULL,
	UserNm varchar(255),
	UserAge  int
);  
 
-- 삭제하면서 테이블 변수에 넣기.
DELETE UserInfoForDelete
OUTPUT DELETED.UserId,  
		DELETED.UserNm,
		DELETED.UserAge  
	INTO @UserInfoForDeleteVar
FROM UserInfoForDelete     
;  
  
--삭제 데이터 확인 
SELECT * 
FROM @UserInfoForDeleteVar 
;

 

OUTPUT을 이용하여 삭제된 데이터 확인

DELETE DML문 주의 사항

조건 없는 DELETE DML 문.

조건 없이 DELETE DML문을 실행하면 해당 테이블의 모든 레코드가 삭제됩니다.
테이블 변수와 OUTPUT을 이용하여 삭제한 DATA를 확인하면 좋습니다.

DELETE DML 트랜잭션 활용.

DELETE DML문은 데이터의 영구적인 삭제를 의미하므로, DBA들은 실수를 방지하기 위해 트랜잭션을 활용하여 롤백을 사용합니다.

DELETE DML 문 WHERE 활용.

DELETE DML 문을 실행할 때는 WHERE 조건을 명확하게 지정하여 삭제할 대상 DATA를 제한하는 것이 중요합니다.

 

반응형