Database/MySQL

[MySQL] UPDATE 문에서 다른 테이블의 값을 활용하는 방법

Devyne 2025. 3. 31. 10:24
반응형

MySQL에서 데이터를 업데이트할 때, 특정 조건에 맞는 값을 다른 테이블에서 가져와 변경해야 하는 경우가 있습니다. 예를 들어, Table_A의 column1 값을 Table_B의 column2 값으로 업데이트해야 할 수도 있습니다. 이 글에서는 MySQL에서 UPDATE 문을 사용하여 다른 테이블의 데이터를 가져와 업데이트하는 다양한 방법을 소개하겠습니다.

 

1. 기본적인 UPDATE ... SET (SELECT ...) 문법

MySQL에서는 UPDATE 문 내에서 SELECT 문을 활용하여 값을 변경할 수 있습니다.

서브쿼리를 사용한 UPDATE

(보통 일반적인 방법)

UPDATE Orders o
SET customer_name = (
    SELECT c.name
    FROM Customers c
    WHERE o.customer_id = c.id
)
WHERE EXISTS (
    SELECT 1 FROM Customers c WHERE o.customer_id = c.id
);

설명

  • Orders 테이블의 customer_name 값을 Customers 테이블의 name 값으로 업데이트합니다.
  • WHERE EXISTS 절을 사용하여 Customers 테이블에 해당하는 id 값이 있는 경우만 업데이트를 수행합니다.
  • 데이터가 많을 경우 성능 저하가 발생할 수 있습니다.

 

2. JOIN 을 활용한 UPDATE (더 효율적인 방법)

JOIN을 활용하면 보다 효율적으로 대량 데이터를 업데이트할 수 있습니다.

(MySQL, MariaDB, PostrgreSQL 에서 가능. Oracle에서는 다이렉트 지원은 없음)

 

JOIN을 활용한 UPDATE

UPDATE Orders o
JOIN Customers c ON o.customer_id = c.id
SET o.customer_name = c.name;

설명

  • JOIN을 활용하여 Orders와 Customers를 연결하고, customer_id가 일치하는 경우 customer_name 값을 업데이트합니다.
  • 서브쿼리를 사용하는 것보다 성능이 더 좋으며, 많은 데이터를 업데이트할 때 유리합니다.

 

3. MERGE INFO (Oracle 및 일부 DBMS에서 사용 가능)

Oracle 또는 일부 DBMS에서 UPDATE 문에서 JOIN을 지원 안하는 경우가 있습니다.

MEGRE 문을 활용하여 동일한 작업을 수행할 수 있습니다.

MERGE INTO Orders o
USING Customers c
ON (o.customer_id = c.id)
WHEN MATCHED THEN
    UPDATE SET o.customer_name = c.name;

정리

MySQL에서 다른 테이블의 데이터를 활용하여 업데이트하는 방법으로 UPDATE ... SET (SELECT ...)UPDATE ... JOIN을 사용할 수 있습니다. 성능을 고려할 경우 JOIN을 활용한 방법이 더 유리하며, 상황에 맞게 최적화하여 사용하는 것이 중요합니다.

반응형
댓글수0