쿼리실습 - 데이터 삽입

imjingu·2023년 8월 17일
0

개발공부

목록 보기
385/481

1. INSERT

새로운 레코드를 추가하는 명령.
INSERT 문을 스크립트로 작성해 놓으면 많은 데이터를 순차적으로 입력할 수 있어서 편리.

기본 형식
INSERT INTO 테이블 (필드목록) VALUES (값목록)

명령어가 두 단어로 되어 있는데,
INSERT는 삽입하라는 명령어이고
INTO는 삽입 대상을 명시하는 전치사. 마리아 디비는 INTO 생략을 허용하지만 SQL 표준에는 INTO가 필수.
INTO 다음에 새 레코드를 삽입할 테이블 이름을 적음. 필드 목록에 삽입할 필드의 이름을 콤마로 구분하여 나열.
VALUES 절의 값 목록에는 필드에 대입할 값을 나열.
앞에서 서울 레코드를 삽입하는 원론적인 쿼리문은 다음과 같음.

INSERT INTO tCity (name, area, popu, metro, region) VALUES ('서울', 605, 974 ,'y', '경기');

필드 목록, 값 목록 모두 5개여서 개수가 맞음.
필드 목록과 값 목록이 반복되어 명령문이 길고 필드명을 일일이 순서에 맞춰 입력해야 되서 길어짐. 모든 필드를 선언 순서대로 삽입할 때는 필드 목록을 생략 할 수 있음.

INSERT INTO tCity VALUES ('서울',605, 974,'y','경기');

서울이 이미 있어서 중복 삽입을 할수 없으므로 테이블에 없는 평택을 입력.

INSERT INTO tCity VALUES ('평택', 453, 51, 'n', '경기');


간단하게 하는 방법은 필드 목록이 없는 대신 값 목록이 완전해야 하며 순서도 반드시 지켜야
함.

INSERT INTO tCity VALUES ('평택', 51, 453, 'n', '경기');

area와 popu가 바뀜

INSERT INTO tCity VALUES ('평택', 453, 'n', 51, '경기');

popu와 metro 순서가 바뀜

INSERT INTO tCity VALUES ('평택', 453, 'n', '경기');

popu 필드값 누락

필드 목록을 밝히면 꼭 선언 순서에 맞추지 않아도 원하는 순대대로 나열할 수 있음.

INSERT INTO tCity (area, popu, metro, region, name) VALUES (453, 51, 'n', '경기', '평택');

요약하면 필드 목록을 생략하지 말든가, 생략했다면 값 목록을 완벽하게 적는지 2개 중 하나를 선택.

3. 확장 INSERT문

tCity 테이블로 실습을 하다가 원래대로 초기화 하고 싶다면 다음 명령으로 테이블을 싹 비움.

TRUNCATE TABLE tCity;

각 행마다 개별적으로 INSERT INTO 명령을 일일이 작성하면 쿼리문이 길어 번잡스러움.

INSERT INTO tCity (name, area, popu, metro, region) VALUES
('서울',605,974,'y','경기'),
('부산',765,342,'y','경상'),
('오산',42,21,'n','경기'),
('청주',940,83,'n','충청'),
('전주',205,65,'n','전라'),
('순천',910,27,'n','전라'),
('춘천',1116,27,'n','강원'),
('홍천',1819,7,'n','강원');
대량의 데이터를 삽입할 때는 더 편함. 백업을 복구하는 경우 속도는 개별보다 느림.
MySql에서 최초 도입했고 왠만한 DBMS에서는 지원하지만, 표준SQL 문법은 아니고 오라클에서도 지원하지는 않음.

4. INSERT SELECT

INSERT 명령은 한번에 하나의 레코드만 삽입하지만, 다른 테이블 또는 자기 자신에게 이미 저장되어 있는 대량의 정보를 복사할 때는 조회한 결과셋을 한꺼번에 삽입할 수 있음.

기본형
INSERT INTO 대상테이블 (필드목록) SELECT 필드목록 FROM 원본테이블

INSERT INTO와 기본 형식은 비슷하지만 필드의 값을 VALUES 절로 지정하지 않고 SELECT 명령으로 다른 테이블에서 읽어온다는 점이 다름. 별도의 문법이라기 보다는 INSERT INTO에 SELECT 명령이 포함된 형식.

INSERT INTO tStaff (name, depart, gender, joindate, grade, salary, score) SELECT name, region, metro, '20210629', '신입', area, popu FROM tCITY WHERE region = '경기';

tCity 테이블에서 경기도 소속의 도시 정보를 읽어 tStaff 테이블에 신입 직원으로 삽입. 다른 테이블의 정보를 재활용하는 경우는 흔하며 심지어 같은 테이블의 정보를 재활용하기도 함.

5. CREATE SELECT

CREATE SELECT 명령은 INSERT SELECT 와 유사하되 기존 테이블에 레코드를 삽입하는 것이 아니라 새로 테이블을 만들어 결과셋을 삽입하는 점이 다름.

기본형
CREATE TABLE 대상테이블 AS SELECT 필드목록 FROM 원본테이블

테이블을 새로 만들면서 기존 테이블의 일부 필드와 레코드를 가져와 삽입하는 명령이어서 대상 테이블이 존재하면 안됨.
원본을 손상시키지 않고 특수한 작업을 할려면 사본을 따로 만드는 것이 좋아서 CREATE SELECT 명령이 유용.

CREATE TABLE tSudo AS SELECT name, area, popu FROM tCity WHERE region = '경기';


경기도 지역의 도시만으로 tSudo 테이블을 생성.

SELECT * FROM tSudo;


tStaff 테이블에 대량의 변경을 가해야 하는데 불안할 경우 다음 명령으로 복사를 뜸.

CREATE TABLE tStaff_backup_220907 AS SELECT * FROM tStaff;

백업은 여러번 뜰 수 있어서 관행상 날짜를 명시. 혹시 잘못 조작해서 tStaff의 데이터가 의도와 다르게 손상이 되었으면 백업에서 데이터를 가져오고, 이상이 없으면 적당한 때 백업을 삭제하면 됨.
데이터의 백업은 되나 원본 테이블의 키 속성을 가지고 오지 못함.

0개의 댓글