수색…


소개

DELETE 문은 테이블에서 레코드를 삭제하는 데 사용됩니다.

통사론

  1. DELETE FROM TableName [WHERE 조건 ] [LIMIT 개수 ]

WHERE를 사용하여 특정 행을 삭제합니다.

그러면 WHERE 조건과 일치하는 모든 행이 삭제됩니다.

DELETE FROM Employees
WHERE FName = 'John'

모든 행을 삭제합니다.

WHERE 절을 생략하면 테이블에서 모든 행이 삭제됩니다.

DELETE FROM Employees

TRUNCATE 성능은 트리거 및 인덱스를 무시하고 데이터를 삭제하기위한 로그를 무시하기 때문에 TRUNCATE 성능이 향상 될 수있는 방법에 대한 자세한 내용은 TRUNCATE 설명서를 참조하십시오.

TRUNCATE 절

테이블을 작성한 조건으로 재설정하려면이 옵션을 사용하십시오. 이렇게하면 모든 행이 삭제되고 자동 증가와 같은 값이 재설정됩니다. 또한 개별 행 삭제를 로깅하지 않습니다.

TRUNCATE TABLE Employees

다른 테이블과의 비교를 기반으로 특정 행을 삭제합니다.

다른 테이블의 특정 데이터와 일치하거나 일치하지 않으면 테이블에서 데이터를 DELETE 수 있습니다.

소스에서 일단 Target으로로드 된 데이터를 DELETE 하려고한다고 가정 해 봅시다.

DELETE FROM Source
WHERE  EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
               FROM Target
               Where Source.ID = Target.ID )

가장 일반적인 RDBMS 구현 (예 : MySQL, Oracle, PostgresSQL, Teradata)은 DELETE 중에 테이블을 조인하여 컴팩트 구문에서 더 복잡한 비교를 허용합니다.

원래 시나리오에 복잡성을 추가하는 경우, Aggregate는 하루에 한 번 Target에서 작성되었으며 동일한 ID를 포함하지 않지만 동일한 날짜를 포함한다고 가정합시다. 또한 집계가 하루 동안 채워진 후에 Source에서 데이터를 삭제하려고한다고 가정합시다.

MySQL, Oracle 및 Teradata에서 다음을 사용하여이 작업을 수행 할 수 있습니다.

DELETE FROM Source
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.Date = AggregateSchema.Aggregate.Date

PostgreSQL 사용 :

DELETE FROM Source
USING  TargetSchema.Target, AggregateSchema.Aggregate
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate

이것은 본질적으로 소스, 목표 및 집계 사이의 INNER JOIN을 초래합니다. 해당 ID가 Target에 존재하고 Target에있는 ID가 Aggregate에있는 경우 Source에서 삭제가 수행됩니다.

동일한 쿼리를 다음과 같이 작성할 수도 있습니다 (MySQL, Oracle, Teradata) :

DELETE Source
FROM   Source, TargetSchema.Target, AggregateSchema.Aggregate
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate

명시 적 조인은 일부 RDBMS 구현 (예 : Oracle, MySQL)의 Delete 문에 언급 될 수 있지만 모든 플랫폼에서 지원되지는 않습니다 (예 : Teradata가 지원하지 않음)

비교는 모든 구문 스타일과 일치하는 불일치 시나리오를 확인하도록 설계 될 수 있습니다 (아래에 NOT EXISTS 관찰하십시오)

DELETE FROM Source
WHERE NOT EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
               FROM Target
               Where Source.ID = Target.ID )


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow