본문 바로가기

별걸다하는 IT/데이터베이스 Database

[SQL문법] INSERT 다양한 사용법, 다른 테이블 SELECT 결과 그대로 삽입하는 법, 테이블 데이터 통복사

반응형

[데이터베이스 SQL 카테고리 링크 모음]

안녕하세요

저번시간에는 데이터를 수정하는 UPDATE문에 대해 알아봤는데요.

이번에는 테이블에 데이터 삽입하는 INSERT문에 대해 살펴보려고 합니다.

 

INSERT 명령이란? - 데이터 삽입

상품 테이블에 지금 토마토와 바나나 정보가 있는데요.

우리 가게가 여유가 되어서 딸기와 메론을 들여와 새로운 메뉴로 판매하려고 합니다.

그럼 상품테이블에 딸기 메론 정보를 새로 추가해줘야하는데,

이때 사용하는 문법이 INSERT예요.

INSERT 기본 문법

insert 기본 문법

위의 상품테이블에 딸기 데이터를 추가하려면

INSERT INTO PRODUCT (상품명, 상품번호, 가격) VALUES ('딸기', 110, 5000);

요렇게 작성하면 될거예요.

 

주의할점은 컬럼숫자와 VALUES 뒤에 오는 값 데이터 개수가 동일해야 합니다.

또, 값n번째가 컬럼n번째에 들어가는 것이니까 추가하려는 데이터와 컬럼 타입이 동일해야해요.

그렇지 않다면 에러가 발생합니다.

 

INSERT 컬럼명 생략 문법

컬럼 개수가 엄청 길면 저거 다 언제 써...

실제로 저희 회사에서 사용하는 테이블 중에 컬럼개수가 200개가 넘는게 있답니다. 놀랍죠..?

요렇게 테이블명 뒤에 나오는 컬럼 파트를 통으로 생략해도 되는데요.

이럴 경우에는 데이터를 테이블에 있는 컬럼 순서대로 넣어줘야 합니다.

INSERT INTO PRODUCT VALUES ('메론', 210, 12000);

컬럼부분을 생략한 문법으로 메론 데이터를 삽입해봤어요.

 

다른 테이블 조회 결과를 삽입 데이터로 사용하기

테이블 결과데이터를 다량으로 INSERT해야할 때가 있는데요

결과가 100개면 100개를 일일이 INSERT문으로 작성하기에는 한계가 있겠죠?

그럴 경우에는 INSERT INTO SELECT구문을 통해서

이렇게 SELECT의 결과로 조회된 데이터값을 한 번에 삽입할 수 있습니다.

반응형

한 예로, 우리식품 업체가 DB 서버 두대를 사용하는데 동기화를 통해 양쪽 서버간 데이터를 맞추고 있다고 합시다.

그런데 어느날, 스토리지 장애가 나서 확인해보니까

A디비와 B디비의 상품테이블 개수가 차이가 나는거예요!

양쪽에 동일하게 데이터가 있지 않다면 INSERT구문을 통해서 서로 맞춰줘야겠죠~~

이럴 경우 데이터가 많은 테이블에서 적은 테이블을 뺀 결과를 적은 테이블에 INSERT해주면 한 번에 맞춰질거예요.

 

또는 백업테이블이 있다는 가정하에,

어느날 내가 사용하던 테이블 데이터가 실수로 다 날라가버렸어!

그럴 경우 백업테이블에 있는 데이터를 그대로 옮겨주면 되겠죠?

INSERT INTO 테이블1 SELECT b.* FROM 백업테이블 b

 

테이블까지 새로 만들어서 삽입하기

위에 INSERT INTO SELECT는, 데이터만 삽입하는거고,,

데이터만 날아간게 아니라 테이블 자체가 통으로 날아가버려서 백업테이블을 복사해서 써야한다면 

그때 SELECT INTO 문법을 사용하면 돼요.

SELECT * INTO 뉴테이블 FROM 백업테이블

요러허게 하면 백업테이블을 복사해다가 뉴테이블을 만듭니다 (물론 데이터까지)

 

이렇듯 필요한 상황이 있다면 이에 맞는 삽입 문법을 사용해주면 돼요.

오늘은 간단하게 데이터를 삽입하는 법에 대해 알아봤어요.

도움이 되었다면 공감은 어떤가요?

반응형