본문 바로가기
Database/MySQL

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

by Devyne 2025. 3. 31.
반응형

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을 활용한 방법이 더 유리하며, 상황에 맞게 최적화하여 사용하는 것이 중요합니다.

반응형

'Database > MySQL' 카테고리의 다른 글

[Mysql] SELECT 결과를 UPDATE문에 반영하기  (0) 2024.03.26