[SQL#003] 꽤 똑똑한 UPDATE문
쿼리문 공부가 그리 만만한 일은 아니다. 어렵기도 하고 재미도 없고, 그리 급히 배울 이유도 없으니 따분한 공부 중 하나다. 그래서 쿼리를 학습하는 강의 시간에 조금이나마 쿼리문의 즐거움을 보여주고자 나름으로 노력하고 있다. 오늘도 그런 쿼리중에 하나를 정리했다. 이번에는 재미있는 UPDATE 문을 만나보자. 다음은 tempdb 데이터베이스에 dbo.T1 테이블을 만들고 두 개의 행을 추가하는 쿼리문이다.
USE tempdb GO CREATE TABLE dbo.T1 ( col1 int, col2 int, col3 int, col4 int, col5 int ) GO INSERT INTO dbo.T1 VALUES(5, 1, 2, 3, 4) INSERT INTO dbo.T1 VALUES(50, 10, 20, 30, 40)
dbo.T1 테이블에 입력된 데이터를 살펴보자.
SELECT * FROM dbo.T1 GO
[실행결과]
위 결과를 다음과 같은 결과가 되도록 테이블 데이터를 변경하고 싶다.
[원하는 결과]
혹시 원하는 게 무엇인지 모르겠는가? col1 열 데이터를 맨 뒤로 밀고, 나머지 열 데이터를 앞으로 당기고 싶은 것이다. 이렇게 하기 위한 가장 손쉬운 방법이 무엇일까? 강의 시간에 이러한 상황을 만들고 수강생에게 물어보면, 가장 많은 답변이 새로운 테이블을 만들어 원하는 형태로 데이터를 옮긴 후 테이블 이름을 바꾸자는 것이다. 물론 그렇게 해도 되겠지만, 좀 더 색다른 방법이 없을까?
만일 다음과 같이 우리가 원하는 바를 그냥 작성한 단순한 UPDATE 문을 수행하면 dbo.T1 테이블 데이터는 어떻게 될지 생각해보자.
UPDATE dbo.T1 SET col1 = col2, col2 = col3, col3 = col4, col4 = col5, col5 = col1 GO
결과를 예측해보라 하면 수강생 대부분이 다음과 같은 결과가 될 것이라고 답한다.
[예상되는 결과]
col1 열 데이터가 이미 col2 열 데이터로 변경된 상황에서, col5 열 데이터를 col1 열 데이터로 변경하니, col1 열과 col5 열 데이터가 같아질 것이라는 예측이고, 이 예측이 얼핏 보면 타당해 보인다.
그럼 실제 변경된 결과를 확인해보자.
SELECT * FROM dbo.T1 GO
[실행결과]
짜잔! 위 실행 결과가 우리가 원했던 결과다. 예측과 달리 col1 열 이전 데이터를 col5 열이 갖게 되면서 원하는 결과를 얻었다. 이런 결과를 보면 ‘UPDATE 문이 우리 마음을 아네! 참 똑똑하네!’라는 생각이 든다. 역시 쿼리문은 재미있다. 조만간 재미난 UPDATE 문을 하나 더 살펴보자.