Programming/Microsoft SQL Server
Table의 Data를 삭제하기 위해서는 Delete구문을 사용합니다. Delete는 사용방법에 관해서는 Select나 Insert, Update보다 훨씬 쉬운 DML구문에 해당합니다.
그 만큼 너무나도 삭제가 간단하므로 Delete문을 사용하기전 Transaction을 걸어놓는등의 주의가 꼭 필요합니다.

참고:
(1) DML(Data Manipulation Language) : Table의 Data를 조회하거나, 변경, 삭제 하는 SQL구문
(2) Transaction : Table의 Data를 변경하거나 혹은 삭제했을때 그것을 당장 반영하지 않고 대기상태에 머물게 합니다. 이 후 따로 확인명령이 있어야지만 변경된 작업을 반영하는 Data관리 개념입니다.

1. 테이블 전체 행 지우기

Delete From HumanResources.EmployeeDepartmentHistory

HumanResources.EmployeeDepartmentHistory Table의 모든 행을 삭제합니다.



2. 원하는 행만 삭제하기

Delete문도 Select나 Update처럼 Where조건을 지정해 원하는 행만 삭제할 수 있습니다.

Delete From HumanResources.EmployeePayHistory
Where BusinessEntityID = 290

HumanResources.EmployeePayHistory Table에서 BusinessEntityID가 290인 행을 삭제합니다.


3. 중복행 삭제하기

Table에 중복되는 Data가 많을 경우 중복부분을 삭제해야 하는 경우가 종종 발생하곤 합니다. 이때는 Select문에서 보았던 Top절을 이용해 삭제하는 방법을 많이 쓰고 있습니다.

먼저 중복행 삭제를 위해 간단한 Table 하나를 살펴보겠습니다.

Select *
From Sales.SalesTerritoryHistory
Where TerritoryID = 1

Sales.SalesTerritoryHistory Table에서 TerritoryID가 1인것만 모두 조회합니다.


이중에서 TerritoryID가 1인것 하나만 남겨두고 상위 2개는 모두 삭제해 보겠습니다.

Delete Top(2) Sales.SalesTerritoryHistory
Where TerritoryID = 1

Sales.SalesTerritoryHistory Table에서 상위 TerritoryID가 1인것 2행을 삭제합니다.


Delete는 테이블에 특정한 처리를 행하지 않기 때문에 비교적 빠른 속도로 Data를 삭제하지만 이것도 너무 많은 경우 그 만큼 시간이 오래 걸릴 수 있습니다. 삭제하면서 트랜잭션 로그를 기록하기 때문인데요.

이럴때는 Truncate 구문을 사용하면 시간을 단축 시킬 수 있습니다. 예를 들어 대상 Table이 Sales.SalesTerritoryHistory일 경우 다음과 같이 작성하면 됩니다.

Truncate Table Sales.SalesTerritoryHistory

Truncate는 Data삭제할 때 실제 Data를 지우지 않고 IAM(Index Allocation Map)의 정보만을 삭제하며 트랜잭션 로그를 생성하지 않기에 삭제시간을 단축시킬 수 있는 것입니다. 이것은 마치 책의 실제내용이 아닌 색인정보만을 지워서 실제 책안에 내용이 아무것도 없는것처럼 하는것과 처리가 비슷하다고 보시면 됩니다.


'Programming > Microsoft SQL Server' 카테고리의 다른 글

[SQL] Update  (0) 2010.09.01
[SQL] Replicate로 문자열 채워넣기  (0) 2010.08.26
[SQL] Delete  (0) 2010.08.25
[SQL] 임시 Table과 변수 Table  (2) 2010.08.24
[SQL] 구성함수(전역변수)  (0) 2010.08.20
[SQL] 트랜잭션(Transaction)  (0) 2010.08.19
0 0