데이터베이스 작업을 하다보면 기존에 있는 데이터와 동일한 값의 데이터를 생성하거나, 기존에 있는 데이터를 기반으로 약간의 값 변경만을 적용하여 데이터를 생성하고 싶을때가 많다. 각각 경우에 어떻게 해야되는지 한번 살펴보도록 하자.
아래 쿼리를 실행하면 SELECT구문에서 선택된 row들이 바로 INSERT가 된다.
INSERT INTO account (`user_id`, `platform`, `username`, `last_login`, `created_at`)
SELECT `user_id`, `platform`, `username`, `last_login`, `created_at` FROM account WHERE platform="android";
SELECT 구문에서 선택된 row들의 값을 변경해서 다른 값을 INSERT하고 싶다면 다음과같이 필드 이름 대신 원하는 값을 지정해주면 된다. 아래 예제에서 platform 필드에는 iphone이, created_at에서는 DB의 현재 시간이 새롭게 지정되어 INSERT되는것을 알 수 있다.
INSERT INTO account (`user_id`, `platform`, `username`, `last_login`, `created_at`)
SELECT `user_id`, 'iphone', `username`, `last_login`, now() FROM account WHERE platform="android";