안녕하세요. 우기입니다. :) MSSQL 관련해서 오랜만에 포스팅을 추가해보려고 합니다. 최근에 많이 활용했었던 것 중 하나인 SELECT INTO와 INSERT INTO SELECT 구문 활용법을 함께 공부해보겠습니다. 실무적으로 데이터베이스를 관리한다면 유용하게 쓸 수 있는 기능이니 알아 두어요!!
먼저, INSERT구문부터 다시 한번 보고 INSERT INTO SELECT 문으로 넘어가보겠습니다.그 후에 SELECT * INTO와 INTO SELECT 문의 차이점에 대해 알아보겠습니다.😊
INSERT문?
INSERT문은 말 그대로 테이블에 데이터를 삽입하는 것을 말합니다.
실무에서는 인서트, INSERT라는 말도 많이 쓰고 실제로 데이터를 관리 직종군이면 필수적으로 알아놓으셔야 합니다. :)
INSERT 구문
INSERT INTO 테이블명 (컬럼1,컬럼2,컬럼3,컬럼4,...) VALUES (데이터1,데이터2,데이터3,데이터4,...)
INSERT INTO MA_EMP(NO_EMP, NM_KOR) VALUES ('20141438', '이태북')
INSERT INTO MA_EMP(NO_EMP, NM_KOR) VALUES ('20141444', '김세전')
INSERT INTO MA_EMP(NO_EMP, NM_KOR) VALUES ('20210101', '복태인')
--INSERT된 테이블 조회
SELECT *
FROM MA_EMP
SELECT 결과 :
NO_EMP(사원번호) | NM_KOR(사원이름) | |
1 | 20141438 | 이태북 |
2 | 20141444 | 김세전 |
3 | 20210101 | 복태인 |
이렇게 MA_EMP라는 사원 테이블에 NO_EMP 컬럼과 NM_KOR 컬럼에 3개씩 데이터를 추가한 것을 확인할 수 있습니다.
다음은 INSERT INTO SELECT 문을 함께 살펴보도록 하겠습니다.
INSERT문은 이렇게 활용되고, 자세한 설명은 이전 포스팅 글을 한번 참고해주세요.
2021.02.21 - [DB/MS SQL] - [MSSQL] INSERT문 설명 및 예제
INSERT INTO SELECT문?
INSERT INTO SELECT문은 테이블의 데이터를 우리가 복사하고자 하는 대상 테이블로 복사하는 기능을 가진 구문입니다.
(테스트 회사 기준으로 테스트 진행 후, 라이브 전 실 라이브 회사로 데이터를 이관하거나 마이그레이션할 때 많이 활용합니다.)
INSERT문과의 차이점은 INSERT문은 데이터를 한 행씩 밀어넣는 역할이라면, INSERT INTO SELECT문은 다른 테이블의 데이터들을 일괄로 한번에 삽입하는 경우 활용할 수 있습니다.
INSERT INTO SELECT 구문
--원본테이블과 복사 대상 테이블 스키마 동일할 경우
INSERT INTO 복사 대상 테이블명(컬럼명)
SELECT 컬럼명 FROM 원본테이블명
WHERE 조건 ~
INSERT INTO MA_WOOGIE (NO_WOOGIE)
SELECT NO_EMP FROM MA_EMP
--INSERT된 테이블 조회
SELECT *
FROM MA_WOOGIE
SELECT 결과 :
NO_WOOGIE | |
1 | 20141438 |
2 | 20141444 |
3 | 20210101 |
> 이렇게 MA_EMP 테이블의 NO_EMP 컬럼 데이터들이 MA_WOOGIE 테이블의 NO_WOOGIE 컬럼에 복사가 되었습니다.
⁕원본 테이블 A에서 복사 대상 테이블 B로 모든 데이터를 가져오는데, A보다 B가 컬럼 수가 적을 경우에는 이렇게 활용이 가능합니다.
--원본 테이블 A보다 대상 테이블 B가 컬럼 수 적을 경우 활용법
INSERT INTO B SELECT 컬럼1, 컬럼2, 컬럼3 FROM A
다음으로는 INSERT INTO SELECT 구문과 비슷하지만 다른 SELECT INTO 구문의 차이점을 설명하기 위해 SELECT INTO 구문을
살펴보겠습니다.
SELECT INTO문?
SELECT INTO 구문은 데이터를 포함한 테이블을 복사하는 것으로, 원본 테이블과 동일한 테이블을 생성한다고 보면 됩니다.😁
원본 테이블은 존재하고, 대상 테이블에 대해 새로 생성하고자 하는 경우 사용합니다.
(원본 A테이블과 동일한 컬럼과 데이터를 갖는 B테이블이 생성됩니다.)
SELECT INTO 구문
SELECT 컬럼명 INTO 생성 대상 테이블명
FROM 원본 테이블명
WHERE 조건 ~
SELECT * INTO ZZ_EMP
FROM MA_EMP
--예시 WHERE CD_COMPANY='WOOK1'
--INSERT된 테이블 조회
SELECT *
FROM ZZ_EMP
SELECT 결과 :
NO_EMP(사원번호) | NM_KOR(사원이름) | |
1 | 20141438 | 이태북 |
2 | 20141444 | 김세전 |
3 | 20210101 | 복태인 |
⁕원본 테이블 A의 특정 컬럼만 B테이블로 가져오고 싶은 경우는 다음과 같이 활용할 수 있습니다.
--원본 테이블 A의 특정 컬럼만 대상 테이블 B로 INSERT
SELECT * INTO B
FROM (
SELECT 컬럼1, 컬럼2, 컬럼3, ...
FROM A
) AS 테스트으으으으
꿀팁!!
1. 테이터를 제외하고 테이블의 구조만 동일한 테이블을 만들고자 할 경우에는 WHERE 조건을 추가해서 조회되는 데이터가 없도록 하면 됩니다.
(ex. WHERE 1=2;)
2. SELECT * INTO 구문과 INSERT INTO SELECT 구문의 차이점은 INSERT INTO 구문은 원본 테이블과 복사 대상 테이블이 모두 존재하는 경우 사용합니다.
이렇게 INSERT문부터 INSERT INTO SELECT문 그리고 SELECT INTO 구문을 같이 공부해보았습니다.
(하다가 A, B 이렇게 적으면서 조금씩 헷갈린 건 비밀...😣)
화이팅!
'DB > MS SQL' 카테고리의 다른 글
[MSSQL] MERGE 구문 설명 및 사용법 (데이터 입력/수정/삭제) (0) | 2021.04.18 |
---|---|
[MSSQL] CASE WHEN 및 IF문 설명 및 사용법(조건문) (0) | 2021.04.05 |
[MSSQL] #2 EXISTS, NOT EXISTS문 설명 및 사용법 (3) | 2021.03.28 |
[MSSQL] #1 IN, NOT IN 구문 설명 및 사용법(오류 케이스) (1) | 2021.03.25 |
[MSSQL] 데이터 형태 변환 CONVERT / CAST 함수 설명 및 사용법 (0) | 2021.03.21 |