Database

[MySQL] DELETE JOIN - 교차 테이블 데이터 삭제

비번변경 2025. 3. 26. 16:19

개요

2025.03.12-[MySQL] UPDATE JOIN - 교차 테이블 갱신에서 UPDATE JOIN 구문에 대해서 알아보았는데, 이번에는 DELETE JOIN이라는 구문도 발견해서 추가로 정리한다.

 

 

DELETE JOIN

DELETE JOIN은 다른 테이블과 관련된 조건에 따라 한 테이블에서 행을 삭제할 수 있다. 여러 연결된 테이블에 존재하는 데이터에 대해 특정 조건에 따라 행을 삭제해야 할 때 유용하다.

DELETE T1, T2
  FROM T1
 INNER JOIN T2 ON T1.key = T2.key
 WHERE condition;

데이터를 삭제할 테이블을 DELETE와 FROM 절 사이에 나열한다. 위의 예시의 경우 T1, T2 테이블을 나열했는데, 만약 T1만 기재하면 T1 테이블의 데이터만 삭제하게 된다.

JOIN과 WHERE은 UPDATE JOIN과 동일하게 테이블을 조인하는 조건 및 삭제할 데이터의 조건을 지정한다.

 

 

사용 예시

다음과 같이 t1, t2 테이블이 있다고 하자. 두 테이블은 t1의 id, t2의 ref 컬럼에 의한 관계를 가지고 있다.

 

CREATE/INSERT 문

더보기
CREATE TABLE t1 (
    id INT PRIMARY KEY AUTO_INCREMENT
);

CREATE TABLE t2 (
    id VARCHAR(20) PRIMARY KEY,
    ref INT NOT NULL
);

INSERT INTO t1 VALUES (1), (2), (3);
INSERT INTO t2(id, ref) VALUES('A',1),('B',2),('C',3);

이떼 두 테이블에서 tid가 1인 데이터를 삭제하고 싶다. 그 쿼리는 다음과 같이 작성할 수 있다.

DELETE t1, t2
  FROM t1
  JOIN t2
    ON t1.id = t2.ref
 WHERE TRUE
   AND t1.id = 1

쿼리를 실행한 결과는 다음과 같다.

-- t1
| id  |
| --- |
| 2   |
| 3   |

-- t2
| id  | ref |
| --- | --- |
| B   | 2   |
| C   | 3   |

t1에서는 id가 1이고, t2에서는 id가 A이며 ref가 1인 데이터가 삭제된 것을 알 수 있다.

 

 

참고 문서

https://mauvpark.github.io/docs/Sql/MySQL/2021-12-15-b-mysql31.html

https://www.geeksforgeeks.org/mysql-delete-join/

https://www.mysqltutorial.org/mysql-basics/mysql-delete-join/

728x90