개요
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/