SQLite | 데이터의 추가와 수정, 삭제 | 테이블에서 가져온 데이터를 다른 테이블에 추가


테이블에 데이터를 추가할 때에 INSERT 문으로 데이터를 지정하고 추가하는 방법 외에 다른 테이블에 저장되어 있는 데이터를 SELECT 문에서 조회하여 추가 할 수도 있다. 여기에서는 테이블에서 가져온 데이터를 다른 테이블에 추가하는 방법에 대해 설명한다.

다른 테이블에서 가져온 데이터를 테이블에 추가하기

다른 테이블에서 가져온 데이터를 테이블에 추가하는 경우의 형식은 다음과 같다.

INSERT INTO 테이블명 SQL문;

데이터를 추가할 테이블의 컬럼 수와 SQL문으로 조회한 컬럼의 수는 동일해야 한다. 컬럼명은 달라도 상관 없다. 예를 들면 다음과 같다.

INSERT INTO 테이블1 SELECT C1, C2, C3 FROM 테이블2 WHERE 조건식;

위에서는 테이블1에서 정의된 컬럼의 수는 3개여야 한다.

데이터를 추가할 컬럼을 지정할 수도 있다. 형식은 다음과 같다.

INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...) SQL문;

이 경우에도 데이터를 추가할 컬럼의 수와 SQL문으로 조회한 컬럼의 수는 동일해야 한다. 예를 들면 다음과 같다.

INSERT INTO 테이블1 (N1, N2, N3) SELECT C1, C2, C3 FROM 테이블2 WHERE 조건식;

그럼 실제로 해보도록 하자. 원본으로 사용하는 테이블은 다음과 같이 만들고, 데이터를 추가한다.

create table user (id integer, name text, old integer);
insert into user values (1, 'devkuma', 24);
insert into user values (2, 'kimkc', 31);
insert into user values (3, 'araikuma', 18);
insert into user values (4, 'happykuma', 25);
insert into user values (5, 'mykuma', 19);
sqlite> create table user (id integer, name text, old integer);
sqlite> 
sqlite> insert into user values (1, 'devkuma', 24);
sqlite> insert into user values (2, 'kimkc', 31);
sqlite> insert into user values (3, 'araikuma', 18);
sqlite> insert into user values (4, 'happykuma', 25);
sqlite> insert into user values (5, 'mykuma', 19);
sqlite> 

다음은 데이터를 추가할 테이블을 다음과 같이 만든다.

create table olduser (id integer, name text, address text);
sqlite> create table olduser (id integer, name text, address text);
sqlite> 

user 테이블에서 old 컬럼의 값이 20보다 큰 데이터를 조회하고, id 컬럼와 name 컬럼의 값을 olduser 테이블에 추가한다.

insert into olduser (id, name) select id, name from user where old> 20;
sqlite> insert into olduser (id, name) select id, name from user where old> 20;
sqlite> 

데이터가 추가되었는지 olduser 테이블에서 데이터를 조회해 본다. 아래 실행에서는 비교할 수 있도록 먼저 user 테이블의 데이터를 조회하고 있다.

select * from olduser;
sqlite> select * from user;
id          name        old       
----------  ----------  ----------
1           devkuma     24        
2           kimkc       31        
3           araikuma    18        
4           happykuma   25        
5           mykuma      19        
sqlite> 
sqlite> select * from olduser;
id          name        address   
----------  ----------  ----------
1           devkuma               
2           kimkc                 
4           happykuma      
sqlite> 

이와 같이 원본의 테이블에서 old 컬럼의 값이 20보다 큰 데이터만 조회하여 다른 테이블에 추가할 수 있었다. 또한 데이터를 추가할 때 olduser 테이블의 address 컬럼에 값을 지정하지 않으므로 디폴트 값 NULL이 저장되었다.