본문 바로가기

Database/Mssql

MSSQL - TABLE JOIN UPDATE, 테이블 조인 업데이트

MSSQL에서 두 개 이상의 테이블을 조인하여 데이터를 업데이트하는 경우, UPDATE와 함께 JOIN을 사용할 수 있습니다. 주로 INNER JOIN, LEFT JOIN과 같은 조인 방식을 사용하여 특정 조건을 만족하는 데이터만 업데이트할 수 있습니다.

기본 구문 (JOIN을 사용한 UPDATE)

UPDATE t1 
SET t1.column1 = value 
FROM table1 t1 
JOIN table2 t2 
ON t1.id = t2.id 
WHERE 조건;
 
 
 

이 구문에서는 table1의 데이터를 table2와 조인하여 업데이트합니다. JOIN 절에서 두 테이블을 조인하고, WHERE 절에서 조건을 설정하여 특정 행만 업데이트할 수 있습니다.

예시: 두 테이블 간의 업데이트

1. 테이블 구조

  • Orders 테이블 (주문 정보):
    • OrderID (주문 ID)
    • CustomerID (고객 ID)
    • OrderDate (주문 날짜)
  • Customers 테이블 (고객 정보):
    • CustomerID (고객 ID)
    • CustomerName (고객 이름)
    • Status (고객 상태)

2. 조인하여 업데이트

Orders 테이블의 CustomerID를 사용하여 Customers 테이블과 조인한 다음, Customers 테이블의 상태가 'inactive'인 고객들의 주문 날짜를 NULL로 업데이트하려면 다음과 같이 쓸 수 있습니다.

UPDATE o 
SET o.OrderDate = NULL 
FROM Orders o 
JOIN Customers c 
ON o.CustomerID = c.CustomerID 
WHERE c.Status = 'inactive';​

 

이 쿼리는 Orders 테이블에서 CustomerID를 기준으로 Customers 테이블과 조인한 후, Customers 테이블에서 상태(Status)가 inactive인 고객들의 주문 날짜(OrderDate)를 NULL로 업데이트합니다.

 

예시: LEFT JOIN을 사용한 업데이트

 

만약 LEFT JOIN을 사용하여 두 테이블 간의 관계에서, 한 테이블에만 존재하는 데이터도 업데이트하고 싶다면 다음과 같이 할 수 있습니다.

테이블 예시

  • Products 테이블 (상품 정보):
    • ProductID (상품 ID)
    • Price (가격)
  • Sales 테이블 (판매 정보):
    • ProductID (상품 ID)
    • Discount (할인율)

업데이트 예시

할인율이 있는 상품에 대해 Products 테이블의 가격을 업데이트하고, 할인율이 없는 상품은 변경하지 않으려면

LEFT JOIN을 사용할 수 있습니다

UPDATE p 
SET p.Price = p.Price - (p.Price * s.Discount / 100) 
FROM Products p 
LEFT JOIN Sales s 
ON p.ProductID = s.ProductID 
WHERE s.Discount IS NOT NULL;​

 

이 쿼리는 Products 테이블과 Sales 테이블을 ProductID를 기준으로 LEFT JOIN한 후, 할인율이 존재하는 상품에 대해 가격을 업데이트합니다.

 

마지막으로

  • 조인 업데이트: UPDATE 문에서 JOIN을 사용하여 두 개 이상의 테이블을 연결한 후 특정 조건을 만족하는 데이터를 업데이트할 수 있습니다.
  • INNER JOIN: 두 테이블에서 일치하는 데이터만 업데이트합니다.
  • LEFT JOIN: 한쪽 테이블에만 있는 데이터도 포함시켜 업데이트할 수 있습니다.

필요한 상황에 맞는 조인 방식과 조건을 설정해 데이터를 업데이트할 수 있습니다.

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

MSSQL - CASE 문 활용법  (3) 2024.09.07
MSSQL - DATE CONVERT,FORMAT 날짜 변환 방법  (0) 2024.09.07