1.  INSERT

👩🏻‍💻 새로운 레코드를 추가하는 명령

👩🏻‍💻 INSERT 문을 스크립트로 작성해 놓으면 많은 데이터를 순차적으로 입력할 수 있어서 편리

 

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

  📌  명령어가 두 단어로 구성, INSERT는 삽입하라는 명령어이고 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.  확장 INSERT문

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

       ➡️ 대량의 데이터를 삽입할 때는 VALUES 뒤에 차례로 나열하면 편하다.

👩🏻‍💻  백업을 복구하는 경우 속도는 개별보다 느리다.

👩🏻‍💻  표준SQL 문법은 아니고 오라클에서도 지원하지는 않음.

 

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','강원');

 

 

 

3.  INSERT SELECT

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

👩🏻‍💻 INSERT 명령은 한번에 하나의 레코드만 삽입하지만, 다른 테이블 또는 자기 자신에게 이미 저장되어 있는 대량의 정보를 복사할 때는

조회한 결과셋을 한꺼번에 삽입할 수 있다.

👩🏻‍💻 INSERT INTO와 기본 형식은 비슷하지만 필드의 값을 VALUES 대신 SELECT 명령으로 다른 테이블에서 읽어온다는 점이 다르다.

👩🏻‍💻 다른 테이블이나 같은 테이블의 정보를 재활용하는 경우 많다.

 

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

 

📌  tCity 테이블에서 경기도 소속의 도시 정보를 읽어 tStaff 테이블에 신입 직원으로 삽입

 

 

 

4.  CREATE SELECT

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

 

👩🏻‍💻 INSERT SELECT 와 유사하되 기존 테이블에 레코드를 삽입하는 것이 아니라 새로 테이블을 만들어 결과셋을 삽입하는 점이 다르다.

👩🏻‍💻 기존 테이블의 일부 필드와 레코드를 가져와 삽입하는 명령이어서 대상 테이블이 존재하면 안된다.

👩🏻‍💻 원본을 손상시키지 않고 특수한 작업을 하기 위해 사본을 만드는 경우 유용

 

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

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

 

 

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

CREATE TABLE tStaff_backup_240206 AS SELECT * FROM tStaff;

   📌  백업은 여러번 뜰 수 있어서 관행상 날짜를 명시.

   📌  데이터의 백업은 되나 원본 테이블의 키 속성을 가지고 오지 못한다.

[ 내용 참고 : 코딩학원 강의 ]

'Database > MySQL' 카테고리의 다른 글

[MySQL] UPDATE 문  (1) 2024.02.24
[MySQL] DELETE 문  (1) 2024.02.24
[MySQL] GROUP BY, HAVING  (0) 2024.02.23
[MySQL] 집계 함수 (aggregate function)  (0) 2024.02.23
[MySQL] SELECT문 | ORDER BY, DISTINCT, LIMIT, OFFSET FETCH  (0) 2024.02.23

+ Recent posts