FROM 절을 사용하여 데이터 변경
FROM 절을 사용하여 하나 이상의 테이블이나 뷰에서 업데이트할 테이블로 데이터를 가져옵니다. 다음 예에서는 SalesPerson
테이블의 SalesYTD
열을 수정하여 SalesOrderHeader
테이블에서 가장 최근에 기록된 판매 정보를 반영합니다.
USE AdventureWorks;
GO
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD + SubTotal
FROM Sales.SalesPerson AS sp
JOIN Sales.SalesOrderHeader AS so
ON sp.SalesPersonID = so.SalesPersonID
AND so.OrderDate = (SELECT MAX(OrderDate)
FROM Sales.SalesOrderHeader
WHERE SalesPersonID =
sp.SalesPersonID);
GO
이전 예에서는 특정 날짜에 지정된 판매 직원에 대해 하나의 판매 정보만 기록되어 있고 테이블이 최신 상태로 업데이트된 상태라고 가정합니다. 지정된 판매 직원에 대해 두 건 이상의 판매 정보를 같은 날 기록할 수 있는 경우 이 예는 제대로 실행되지 않습니다. 해당 날짜의 실제 판매 실적에 관계없이 이 예는 오류 없이 실행되지만 각 SalesYTD
값은 한 건의 판매 정보로만 업데이트됩니다. 이는 단일 UPDATE 문이 같은 행을 두 번 업데이트하지 않기 때문입니다.
지정된 판매 직원에 대해 하루에 두 번 이상의 판매가 발생할 수 있는 상황에서 각 판매 직원에 대한 모든 판매 정보는 다음 예와 같이 UPDATE
문 내에서 함께 집계되어야 합니다.
USE AdventureWorks;
GO
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD +
(SELECT SUM(so.SubTotal)
FROM Sales.SalesOrderHeader AS so
WHERE so.OrderDate = (SELECT MAX(OrderDate)
FROM Sales.SalesOrderHeader AS so2
WHERE so2.SalesPersonID =
so.SalesPersonID)
AND Sales.SalesPerson.SalesPersonID = so.SalesPersonID
GROUP BY so.SalesPersonID);
GO
참고 항목
개념
SET 절을 사용하여 데이터 변경
WHERE 절을 사용하여 데이터 변경
TOP를 사용하여 업데이트되는 데이터 제한
UPDATE를 사용하여 데이터 변경