

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# DELETE
<a name="r_DELETE"></a>

행을 테이블에서 삭제합니다.

**참고**  
단일 SQL 문의 최대 크기는 16MB입니다.

## 구문
<a name="r_DELETE-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
DELETE [ FROM ] { table_name | materialized_view_name }
    [ { USING } table_name, ... ]
    [ WHERE condition ]
```

## 파라미터
<a name="r_DELETE-parameters"></a>

WITH 절  
하나 이상의 *common-table-expressions*를 지정하는 절(옵션)입니다. [WITH 절](r_WITH_clause.md)을(를) 참조하세요.

FROM  
USING 절이 지정되어 있을 때를 제외하면 FROM 키워드는 선택 사항입니다. `delete from event;` 및 `delete event;` 문은 똑같이 EVENT 테이블에서 모든 행을 제거하는 작업을 수행합니다.  
테이블에서 모든 행을 삭제하려면 테이블을 [TRUNCATE](r_TRUNCATE.md)합니다. TRUNCATE는 DELETE보다 훨씬 더 효율적이며 VACUUM 및 ANALYZE가 필요하지 않습니다. 하지만 TRUNCATE는 이 명령이 실행되는 트랜잭션을 커밋합니다.

 *table\$1name*   
임시 또는 영구 테이블입니다. 테이블의 소유자 또는 테이블에 대한 DELETE 권한을 가진 사용자만이 테이블에서 행을 삭제할 수 있습니다.  
대규모 테이블에서 정규화되지 않은 빠른 삭제 작업을 하려면 TRUNCATE 명령의 사용을 고려하세요([TRUNCATE](r_TRUNCATE.md) 참조).  
테이블에서 많은 수의 행을 삭제한 후  
+ 테이블을 완전히 비워 스토리지 스페이스를 회수하고 행을 다시 정렬합니다.
+ 테이블을 분석하여 쿼리 플래너에 대한 통계를 업데이트합니다.

 *materialized\$1view\$1name*   
구체화된 뷰 DELETE 문은 [구체화된 뷰로 스트리밍 모으기](materialized-view-streaming-ingestion.md)에서 사용되는 구체화된 뷰에서 작동합니다. 구체화된 뷰의 소유자 또는 구체화된 뷰에 대한 DELETE 권한을 가진 사용자만 구체화된 뷰에서 행을 삭제할 수 있습니다.  
사용자에게 RLS 무시 권한이 부여되지 않은 행 수준 보안(RLS) 정책을 사용하는 스트리밍 수집을 위해 구체화된 뷰에서 DELETE를 실행할 수 없습니다. 여기에는 예외가 있습니다. DELETE를 수행하는 사용자에게 IGNORE RLS가 부여되면 성공적으로 실행됩니다. 자세한 내용은 [RLS 정책 소유권 및 관리](https://docs.aws.amazon.com/redshift/latest/dg/t_rls_ownership.html)를 참조하세요.

USING *table\$1name*, ...  
USING 키워드는 WHERE 절 조건에서 추가적인 테이블이 참조될 때 테이블 목록을 소개하는 데 사용됩니다. 예를 들어, 다음 문은 EVENT 및 SALES 테이블에 대한 조인 조건을 충족시키는 EVENT 테이블에서 모든 행을 삭제합니다. SALES 테이블은 FROM 목록에 명시적으로 명명되어야 합니다.  

```
delete from event using sales where event.eventid=sales.eventid;
```
USING 절에서 대상 테이블 이름을 반복하는 경우 DELETE 작업은 자가 조인을 실행합니다. 같은 쿼리를 쓰는 방법의 대안으로서, WHERE 절에서 USING 구문 대신 하위 쿼리를 사용할 수 있습니다.

WHERE *condition*   
행 삭제를 조건과 일치하는 행으로 제한하는 선택적인 절입니다. 예를 들어, 조건은 열에 대한 제한, 조인 조건 또는 쿼리의 결과를 바탕으로 하는 조건일 수 있습니다. 쿼리는 DELETE 명령의 대상이 아닌 테이블을 참조할 수 있습니다. 예:  

```
delete from t1
where col1 in(select col2 from t2);
```
아무런 조건도 지정되지 않은 경우 테이블에 있는 모든 행이 삭제됩니다.

## 사용 노트
<a name="r_DELETE-usage"></a>
+ DELETE 작업은 다음 중 하나에 연결된 Amazon Redshift 스트리밍 구체화된 뷰에서 실행될 때 배타적 잠금을 유지합니다.
  +  Amazon Kinesis 데이터 스트림 
  +  Amazon Managed Streaming for Apache Kafka 주제 
  +  Confluent Cloud Kafka 주제와 같은 지원되는 외부 스트림 

  자세한 내용은 [구체화된 뷰로 스트리밍 모으기](materialized-view-streaming-ingestion.md) 섹션을 참조하세요.

## 예제
<a name="r_DELETE-examples"></a>

CATEGORY 테이블에서 모든 행을 삭제합니다.

```
delete from category;
```

CATEGORY 테이블에서 CATID 값이 0\$19 사이의 값인 행을 삭제합니다.

```
delete from category
where catid between 0 and 9;
```

SALES 테이블에 자신의 SELLERID 값이 존재하지 않는 LISTING 테이블에서 행을 삭제합니다.

```
delete from listing
where listing.sellerid not in(select sales.sellerid from sales);
```

다음 두 쿼리는 모두 EVENT 테이블에 대한 조인과 CATID 열에 대한 추가적인 제한 사항을 바탕으로 CATEGORY 테이블에서 한 개의 행을 삭제합니다.

```
delete from category
using event
where event.catid=category.catid and category.catid=9;
```

```
delete from category
where catid in
(select category.catid from category, event
where category.catid=event.catid and category.catid=9);
```

다음 쿼리는 `mv_cities` 구체화된 뷰에서 모든 행을 삭제합니다. 이 예의 구체화된 뷰 이름은 샘플입니다.

```
delete from mv_cities;
```