DELETE - Amazon Redshift

DELETE

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

참고

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

구문

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

파라미터

WITH 절

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

FROM

USING 절이 지정되어 있을 때를 제외하면 FROM 키워드는 선택 사항입니다. delete from event;delete event; 문은 똑같이 EVENT 테이블에서 모든 행을 제거하는 작업을 수행합니다.

참고

테이블에서 모든 행을 삭제하려면 테이블을 TRUNCATE합니다. TRUNCATE는 DELETE보다 훨씬 더 효율적이며 VACUUM 및 ANALYZE가 필요하지 않습니다. 하지만 TRUNCATE는 이 명령이 실행되는 트랜잭션을 커밋합니다.

table_name

임시 또는 영구 테이블입니다. 테이블의 소유자 또는 테이블에 대한 DELETE 권한을 가진 사용자만이 테이블에서 행을 삭제할 수 있습니다.

대규모 테이블에서 정규화되지 않은 빠른 삭제 작업을 하려면 TRUNCATE 명령의 사용을 고려하십시오(TRUNCATE 참조).

참고

테이블에서 많은 수의 행을 삭제한 후

  • 테이블을 완전히 비워 스토리지 공간을 회수하고 행을 다시 정렬합니다.

  • 테이블을 분석하여 쿼리 플래너에 대한 통계를 업데이트합니다.

materialized_view_name

구체화된 뷰 DELETE 문은 구체화된 뷰로 스트리밍 모으기에서 사용되는 구체화된 뷰에서 작동합니다. 구체화된 뷰의 소유자 또는 구체화된 뷰에 대한 DELETE 권한을 가진 사용자만 구체화된 뷰에서 행을 삭제할 수 있습니다.

사용자에게 RLS 무시 권한이 부여되지 않은 행 수준 보안(RLS) 정책을 사용하는 스트리밍 수집을 위해 구체화된 뷰에서 DELETE를 실행할 수 없습니다. 여기에는 예외가 있습니다. DELETE를 수행하는 사용자에게 IGNORE RLS가 부여되면 성공적으로 실행됩니다. 자세한 내용은 RLS 정책 소유권 및 관리를 참조하세요.

USING table_name, ...

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);

아무런 조건도 지정되지 않은 경우 테이블에 있는 모든 행이 삭제됩니다.

예시

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

delete from category;

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

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;