INSERT

INSERT는 테이블내에 레코드를 입력할 때 사용한다.

INSERT INTO table [ ( column [, ...] ) ]
    { VALUES ( expression [, ...] ) | SELECT query }
    	

앞서도 INSERT문은 사용했으므로 기본적인 사용방법은 낯설지는 않으리라 생각된다. 하지만 여기서 짚고 넘어가고, 또 좀 더 심화된 쿼리를 연습해 보도록 하겠다. 모두 예제를 통해서 살펴보자.

예제 3-10. 기본적인 INSERT문 예제

INSERT INTO student_new (std_id, std_sex, std_name, std_addr, std_tel, std_handphone, std_birthday) 
VALUES ('9744290', 'F', '진혜영', '서울시가 다 내꺼', '02-XXX-XXXX', '011-XXXX-XXXX', '1979-05-14');
			

그림 3-11. INSERT를 이용해서 데이터를 입력해보자.

이전에 만들었던 student_new라는 테이블에 데이터를 입력하는 쿼리이다. INSERT INTO 뒤에 테이블 명이 따라 오며 뒤에 괄호로 구분하고 입력할 컬럼명을 일일히 기술한 뒤에 괄호 닫고 VALUES라는 키워드 따라오고 다시 괄호 열고 값들을 순차적으로 기술하고 난 후에 마지막으로 괄호 닫는 것으로 마감하고 있다.

이러한 구조는 앞에 컬럼을 일일히 기술해주지 않아도 테이블의 구조에 따라 들어가게 할 수 도 있다. 예를 들어 다음을 보도록 하자.

예제 3-11. 조금 다른 INSERT문 예제

INSERT INTO student_new VALUES ('9944000', 'M', '쏘가리', '노숙', '없어', '없어', '1979-01-01');
			

그림 3-12. INSERT를 이용해서 데이터를 입력해보자.

위와 같이 컬럼명을 기술 하지 않으면 테이블의 구조에 따라 차곡차곡 순서대로 필드가 대응되어서 들어가게 된다.

그렇다면 응용하는 방법으로 넣어야 하는 필드만 따로 콕 집어서 넣을 수 도 있겠다. 다음과 같이 해보자.

예제 3-12. 원하는 필드에만 데이터를 입력하는 예제

INSERT INTO student_new (std_id,std_name, std_addr, std_birthday) 
VALUES ('9644021', '누구지', '서울시 동작구 상도동', date(now()));
			

그림 3-13. INSERT를 이용해서 데이터를 입력해보자.

잘~ 들어갔다. 위의 테이블 구조에서 NOT NULL인 항목만 콕 집어서 입력을 한 것이다. 나머지 컬럼은 default값을 설정했다면 default값이 들어갔을 테고, default값을 설정하지 않은 컬럼은 NULL이 들어가게 된다.

위의 예제에서 처음보는 것이 등장했을 것이다. 바로 date(now()) 인데, 이것은 SQL에서 지원하는 함수이다. \df하면 SQL에서 지원하는 함수가 주욱 나타나게 되는데 그중에서 하나로써 now()는 현재 시간을 반환해주며 date()는 date형으로 형변환(type cast)를 해주는 것이다. 여기서는 적절한 예제가 될 수 없지만 (생일이 현재 시간이 되는 경우는 드물다.) 매번 입력할 때 현재 시간을 넣어야 한다면 위와 같이 입력을 해주면 되겠다. 아니면 아예 DEFAULT로 위의 함수를 호출하도록 만들 수도 있겠다.

예제 3-13. INSERT와 SELECT의 조합을 위한 데이터 입력 예제

우선 실습에 사용될 테이블 생성을 위해 다음의 쿼리를 주자.

		
create table a (c1 int, c2 varchar(10));
create table b (num int, description varchar(30), category varchar(10));
insert into b values (1, '메롱', '놀림');
insert into b values (2, 'C8', '욕');
insert into b values (3, '비행기', '명사');
insert into b values (4, '돼지', '동물');
insert into b values (5, '피자', '먹을것');
			

그림 3-14. 실습을 위한 데이터를 입력하자.

열심히 쿼리를 넣어서 b테이블에 값들을 집어 넣었다. 그러면 b에 넣은 값들을 a테이블에 넣을 수 없을까? 그 해답 바로 INSERT와 SELECT를 같이 쓰는 것이다. 다음과 같은 쿼리를 넣어보도록 하자.

예제 3-14. INSERT와 SELECT의 조합 예제

INSERT INTO a SELECT num, description FROM b;
			

그림 3-15. INSERT와 SELECT의 조합.

위에서 보이는 것과 같이 b 테이블에 있던 값들이 a테이블에 무사히 넘어갔다. 다음과 같은 쿼리를 다시 한번 줘 보도록 하자.

예제 3-15. INSERT와 SELECT의 조합 예제 변형

INSERT INTO a (c1, c2) SELECT num+5, category FROM b;
			

그림 3-16. INSERT와 SELECT의 조합 변형.

이번에는 b테이블에 있던 category컬럼이 a테이블에 들어갔다. 단, num를 가져왔을 때 5씩을 더해서 a테이블에서는 중복이 일어나지 않게 했다.