본문 바로가기

개발&컴퓨터/DB

[TIP] MSSQL - SELECT 결과를 새로운 테이블에 바로 INSERT하기

반응형

오랫만에 MS-SQL 을 사용하다가 간단한 쿼리인데, 갑자기 생각이 나지 않아서 헤맸네요. ㅎㅎㅎ

 

특정 테이블의 결과를 다른 테이블로 이동하는 것이 특별한 것은 없습니다.

 

SELECT한 결과를 타겟 테이블로 바로 INSERT 하면 됩니다. 바로 아래처럼요.

 

INSERT INTO TARGET_TABLE(aaa, bbb, ...)

SELECT aaa, bbb, ...

FROM SOURCE_TABLE

WHERE aaa = ????

그런데 SELECT 결과를 삽입하려는 테이블이 존재하지 않는 다면 어떻게 해야 할까요?

 

뭐 특별한 것은 없습니다.

새 테이블을 생성하고, 해당 테이블에 결과 데이터를 삽입하면 됩니다.

 

그런데 테이블 생성, 테이블 조회 및 삽입 이렇게 두 단계를 한 번에 처리할 수 있습니다.

 

단지 이 문법이 오라클과 MS-SQL에서는 큰 차이가 있어서 오랫만에 MS-SQL을 사용하려다 보니, 어리둥절 했네요.^^

 

오라클의 경우 다음과 같은 형태로 작성합니다.

CREATE TABLE NEW_TABLE

AS SELECT * FROM SOURCE_TABLE WHERE (CONDITION)

 

새 테이블을 생성(CRAETE)하고, SELECT 한 결과를 TABLE에 저장한다는 의미가 되겠습니다. (암묵적으로 INSERT 과정의 문법이 생략되었습니다.)

 

그럼 MS-SQL을 볼까요?

SELECT * INTO NEW_TABLE

FROM SOURCE_TABLE WHERE (CONDITION)

SOURCE_TABLE 로부토 조회(SELECT) 한 결과를 바로 새 테이블로 삽입(INTO) 합니다. 테이블 생성과 관련된 문법이 생략되었습니다.)

 

 

오라클이던 MS-SQL이던 둘다 표현하고 있는 문법에 차이가 있지만, 둘 다 의미하는 바가 다른 것은 아닙니다.

왠지 테이블 생성을 좀 더 명시하고 있는, 오라클이 좀 더 직관적이지 않나 싶습니다. (개인적인 생각)

 

MS-SQL은 마치 존재하지 않던 테이블이 있던 마냥(즉, 테이블을 생성한다는 명령어 자체가 문법에 포함되어 있지 않으니) 사용하고 있으니까요. 물론 MS-SQL은 기존에 존재하는 테이블에 위의 문법을 사용하더라도 차이가 없습니다. 내부적으로 NEW_TABLE이 존재하고 있으면 해당 테이블을 사용하고, 없으면 새로 생성한다는 규칙을 가지고 있다고 보면 될 것 같습니다.

 

간단한 문법인데, 갑자기 필요에 의해 오랫만에 사용하다가 포스팅하였습니다.^^

반응형