MSSQL Update 문 및 Join 을 이용한 Update

개요

MSSQL Update 문의 기본 사용법, 다른 테이블을 참조해서 Update, 업데이트 결과 받기 등에 대해서 알아봅니다.

기본 구문

-- Syntax for SQL Server and Azure SQL Database  

[ WITH <common_table_expression> [...n] ]  
UPDATE   
    [ TOP ( expression ) [ PERCENT ] ]   
    { { table_alias | <object> | rowset_function_limited   
         [ WITH ( <Table_Hint_Limited> [ ...n ] ) ]  
      }  
      | @table_variable      
    }  
    SET  
        { column_name = { expression | DEFAULT | NULL }  
          | { udt_column_name.{ { property_name = expression  
                                | field_name = expression }  
                                | method_name ( argument [ ,...n ] )  
                              }  
          }  
          | column_name { .WRITE ( expression , @Offset , @Length ) }  
          | @variable = expression  
          | @variable = column = expression  
          | column_name { += | -= | *= | /= | %= | &= | ^= | |= } expression  
          | @variable { += | -= | *= | /= | %= | &= | ^= | |= } expression  
          | @variable = column { += | -= | *= | /= | %= | &= | ^= | |= } expression  
        } [ ,...n ]   
  
    [ <OUTPUT Clause> ]  
    [ FROM{ <table_source> } [ ,...n ] ]   
    [ WHERE { <search_condition>   
            | { [ CURRENT OF   
                  { { [ GLOBAL ] cursor_name }   
                      | cursor_variable_name   
                  }   
                ]  
              }  
            }   
    ]   
    [ OPTION ( <query_hint> [ ,...n ] ) ]  
[ ; ]  
  
<object> ::=  
{   
    [ server_name . database_name . schema_name .   
    | database_name .[ schema_name ] .   
    | schema_name .  
    ]  
    table_or_view_name}

기본 구문이 상당히 복잡합니다. 워낙 기본적인 문장이다보니 쓰임새도 많고, 옵션도 많습니다.

MSSQL Update 기본 구문 예제

가장 단순한 형태의 예제를 보겠습니다.

MSSQL Update 용 샘플데이터

예제 테이블입니다. 유저 아이디와 이름이 있습니다.
여기에서 2행의 부끄를 시끄로 변경해보겠습니다.

MSSQL Update 결과

MSSQL Update JOIN 예제

다른 테이블을 참조해서 UPDATE 해보겠습니다.

update join 샘플 데이터

첫번째 예제의 #t 테이블의 2행의 descr 컬럼을 #t2 테이블을 이용해서 업데이트 합니다.

FROM, JOIN 을 이용한 UPDATE 결과

update 문의 From 절 부터는 Select 문과 사용법은 동일합니다. 첫 번째 줄의 UPDATE #t 도 UPDATE A 처럼 alias 를 이용해도 됩니다.

MSSQL Update SELECT 예제

Update 는 위에서 언급한것처럼 From 절부터는 Select 문과 같습니다. 그래서 서브쿼리도 사용할 수 있는데요, 위의 UPDATE Join 예제를 아래 두 개의 쿼리처럼 서브쿼리를 사용해도 결과는 동일합니다.

-- From 절에 서브쿼리
UPDATE #t
SET descr = b.usr_descr
FROM #t A
JOIN ( SELECT * FROM #t2 ) B ON A.usr_name = B.usr_name
WHERE A.usr_id = 2

-- Set 절에 서브쿼리
UPDATE #t
SET descr = ( SELECT USR_DESCR FROM #T2 B WHERE A.USR_NAME = B.usr_name )
FROM #t A
WHERE A.usr_id = 2

OUTPUT 절 이용

업데이트 컬럼에 대해서 업데이트 전의 값이나 업데이트 후의 값을 받으려면 아래와 같이 OUTPUT 절을 사용할 수 있습니다.

DECLARE @tbl_out TABLE (
del nvarchar(100)
, ins nvarchar(100)
)
UPDATE #t
SET descr = b.usr_descr
OUTPUT deleted.descr, inserted.descr
	INTO @tbl_out
FROM #t A
JOIN #t2 B ON A.usr_name = B.usr_name
WHERE A.usr_id = 2

SELECT * FROM @tbl_out

샘플 데이터

아래는 샘플데이터 생성 쿼리입니다.

create table #t (
usr_id int
, usr_name nvarchar(100)
, descr nvarchar(100)
)

insert into #t values ( 1, '김복순', '목욕')
insert into #t values ( 2, '부끄', '앙스키')
insert into #t values ( 3, '밀란', '배고파')

create table #t2 (
usr_name nvarchar(100)
, usr_descr nvarchar(100)
)
insert into #t2 values ( '김복순', '목욕')
insert into #t2 values ( '부끄', '앙스키')
insert into #t2 values ( '시끄', '심심해')
insert into #t2 values ( '밀란', '배고파')

그 외

UPDATE 에 대해 썼지만 Delete 도 동일합니다.
MS 문서 Update 링크

Comments

No comments yet. Why don’t you start the discussion?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다