2011년 1월 3일 월요일

JOIN DELETE (Multiple-table Delete)

두개의 테이블을 조인하여 UPDATE를 실행하는 것(JOIN UPDATE)과 같이,
두개의 테이블을 조인하여 그 결과 레코드를 삭제하는 것도 가능하다.

이를 JOIN DELETE 또는 Multiple-Table DELETE라고 하는데,
JOIN DELETE는 아래 두 가지 문법으로 작성할 수 있다.

  • DELETE와 FROM 절 사이에 삭제할 테이블 명시

    DELETE
    t1, t2
    FROM test1 t1 INNER JOIN test2 t2 INNER JOIN test3 t3
    WHERE t1.id=t2.id
      AND t2.id=t3.id;

  • FROM과 USING 절 사이에 삭제할 테이블 명시
    DELETE
    FROM t1, t2
      USING test1 t1 INNER JOIN test2 t2 INNER JOIN test3 t3
    WHERE t1.id=t2.id
      AND t2.id=t3.id;

JOIN DELETE에서도 주의해야 할 사항이 있는데,
  • 조인 결과 레코드가 삭제되는 테이블이 어느 테이블인가 ?.
    • 첫번째 문법에서는 DELETE 키워드와 FROM 절 사이에 명시된 테이블의 레코드만 삭제한다.
    • 두번째 문법에서는 FROM 절과 USING 절 사이에 명시된 테이블의 레코드만 삭제한다.
    • 위의 두 예제에서는 t1(test1) 테이블과 t2(test2) 테이블의 레코드만 삭제하게 된다. t3(test3)의 레코드는 조인에만 참여하고 삭제되지는 않는다.
  • 테이블의 별명(Alias)는 어디에서 정의해야 하는가 ?.
    • 첫번째 문법에서는 FROM 절 이하에서 테이블의 별명(Alias)를 지정하며, 이 이외의 위치에서는 Alias를 지정할 수 없고, FROM 절에서 정의된 Alias를 사용만 해야 한다.
    • 두번째 문법에서는 USING 절 이하에서만 테이블의 별명(Alias)를 정의해야 한다.

댓글 없음:

댓글 쓰기