티스토리 뷰

반응형

이번 글에서는 MySQL 에서 자주 사용하는 SQL인 Insert 문을 수행하는 방법과 데이터 조회와 동시에 데이터 입력을 병행하는 방법을 알아보고자 합니다. 기존에 INSERT 문의 예시는 아래와 같습니다. 

 

1. INSERT SQL 

아래 쿼리는 3개의 ROW를 입력하는 것을 가정하고 기본적인 쿼리를 작성했습니다. 

INSERT INTO table_name (column1, column2, column3, column4, ...)
VALUES ('value1', 'value2', 'value3', 'value4', ...), ## ROW1
('value1', 'value2', 'value3', 'value4', ...), ## ROW2
('value1', 'value2', 'value3', 'value4', ...); ## ROW3

 

2. INSERT SELECT SQL 

위의 쿼리에서는 모든 값을 직접 채워주어야 하는 경우가 많지만, 실제로 더미 데이터를 넣을 때는 유용하지만 불편한 부분이 많습니다. 왜냐면 데이터를 직접 입력해주어야 하기 때문인데요, 아래 쿼리를 통해 다른 테이블에 있는 내용을 보다 쉽게 입력할 수 있습니다.

INSERT INTO table_name (column1, column2, column3, column4, ...)
SELECT s.column1, s.column2, s.column3, s.column4, ... 
FROM another_table as s;

 

기본형은 위와 같으며, 여기에 SELECT 절에 필요한 조건절이 있는 경우 아래처럼 넣어줄 수도 있습니다. 

INSERT INTO table_name (column1, column2, column3, column4, ...)
SELECT s.column1, s.column2, s.column3, s.column4, ... 
FROM another_table as s
WHERE s.column1 between 100 and 200
AND s.column2 >= 50
AND s.column3 is not null
...

 

3. INSERT SELECT with JOIN SQL

SELECT 쿼리인 만큼 JOIN 도 가능합니다. 

INSERT INTO table_name (column1, column2, column3, column4, ...)
SELECT s.column1, s.column2, s.column3, s.column4, ... 
FROM another_table as s
LEFT JOIN join_table as b on b.id = s.id

 

4. 개수 제한

입력할 데이터의 양을 조절하고 싶다면, LIMIT 을 설정해도 됩니다. 또, GROUP BY도 적용됩니다. 

INSERT INTO table_name (column1, column2, column3, column4, ...)
SELECT s.column1, s.column2, s.column3, s.column4, ... 
FROM another_table as s
WHERE s.id < 100000
AND ...
LIMIT 500
INSERT INTO table_name (column1, column2, column3, column4, ...)
SELECT s.column1, s.column2, s.column3, s.column4, ... 
FROM another_table as s
WHERE s.id < 100000
AND ...
GROUP BY s.column1

 

사용시 주의할 점

  • 입력할 컬럼의 개수와 테이블의 개수가 맞아야 한다
  • 입력할 컬럼의 타입이 varchar가 아니라면 타입에 주의하여야 한다. (varchar인 경우 integer, date, timestamp, boolean 모두 입력 가능)
  • select 절에 index가 없는 경우 입력이 느려질 수 있다.
반응형
댓글
공지사항