MSSQL의 UPDATE구문에 대해 알아보도록 하겠습니다. 일반적인 형태의 UPDATE구문은 UPDATE 테이블명 SET 형식으로 작성합니다.
INNER JOIN을 이용하여 다른 테이블과의 비교를 통해 또는 다른 테이블에 있는 데이터로 UPDATE 도 가능합니다.
TIP. UPDATE 구문을 사용할 때는 항상 SELECT 구문을 먼저 작성 후 WHERE절을 카피해서 사용합니다. 만약의 경우에 대비해야 하죠.
Fruit
Seq | Name | Flavor | Rank |
1 | 딸기 | 새콤하다 | 3 |
2 | 바나나 | 달콤하다 | 1 |
3 | 사과 | 향긋하다 | 2 |
상황1) 하나의 테이블 내에서 조건에 맞는 데이터를 업데이트 하려고 할 때.
Fruit테이블에서 Seq=1인 딸기를 Name은 "스토로베리"로, Flavor는 "매콤하다"로 변경한다고 할 경우
다음과 같이 쿼리를 작성합니다.
SELECT * FROM Fruit WHERE Seq=1 --결과를 먼저 확인합니다. UPDATE Fruit SET Name = '스트로베리' , Flavor = '매콤하다' WHERE Seq = 1
뭐, 이건 어렵지 않습니다. 설명할 것도 없네요, 하지만 다음의 상황은 조금 복잡합니다.
상황2) 다른 테이블에서 값을 가져와 데이터를 업데이트 하려고 할 때.
MonthlySales에서 10월의 순위를 가져와 Fruit의 Rank필드에 업데이트 하려고 할 경우.
MonthlySales
Name | Month | Rank |
딸기 | 9월 | 3 |
바나나 | 9월 | 1 |
사과 | 9월 | 2 |
딸기 | 10월 | 1 |
바나나 | 10월 | 2 |
사과 | 10월 | 3 |
방법1) 인라인 쿼리 이용
UPDATE Fruit SET Rank = (SELECT Rank FROM MonthlySales WHERE Name=Fruit.Name AND Month = '10월')
단순하게 생각해볼 수 있는 방법이지만 글쎄요...
방법2) UPDATE FROM 이용
UPDATE FR SET Rank = MS.Rank FROM Fruit AS FR INNER JOIN MonthlySales AS MS ON FR.Name = MS.Name WHERE MS.Month='10월'
좀 복잡해 보이시죠? 하지만 잘 보시면 복잡할게 하나도 없습니다. SELECT INNER JOIN만 알고 있다면요. 일반적인 JOIN문에 SELECT 대신 UPDATE문을 얹은 형태입니다.
SELECT FR.Rank FROM Fruit AS FR INNER JOIN MonthlySales AS MS ON FR.Name = MS.Name WHERE MS.Month='10월'
감 잡으셨나요?
프로젝트의 성공을 기원합니다.
'MS-SQL' 카테고리의 다른 글
MSSQL 특정노드의 상위노드 전체 가져오기(Bottom Up) (0) | 2018.12.03 |
---|---|
MSSQL 데이터 복사, 테이블 복사 SELECT INTO, INSERT SELECT를 이용한 백업 (0) | 2018.11.05 |
mssql 변경 내용을 저장할 수 없습니다. 변경 내용을 적용하려면 다음 테이블을 삭제하고... 오류해결 (1) | 2018.10.23 |
MSSQL 0 채우기 가장 쉬운방법 (0) | 2018.10.20 |
MSSQL 서버의 디폴트 datetime 포맷 변경 (2) | 2018.10.20 |