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이 저장되었다.