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 |