글
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의 조합 변형. UNION, INTERSECT, EXCEPTUNION, INTERSECT, EXCEPT는 합집합, 교집합, 차집합과 관련된 쿼리이다. 다음의 예제를 통해 알아보자. 예제 3-32. 예제를 위한 데이터 작성 우선 예제 적용을 위해 기존에 만들었던 a 테이블에 데이터를 입력하자. INSERT INTO a VALUES (3,'피자');INSERT INTO a VALUES (4,'오징어볶음');INSERT INTO a VALUES (5,'보신탕');INSERT INTO a VALUES (7,'소'); 이런 후 각각 UNION, INTERSECT, EXCEPT 예를 보도록 하겠다. 우선 UNION부터 살펴보자. UNION은 두 테이블간의 서로 합집합을 만들어 주도록 되어 있다. 이때 두개의 SELECT문장을 UNION시킬때 두개의 SELECT문장에서 선택하는 컬럼의 구조는 동일하여야 한다. 이는 UNION만이 아니라 INTERSECT, EXCEPT도 마찬가지이다. 예제 3-33. UNION의 예제 SELECT num, description FROM b UNION SELECT c1, c2, FROM a; 위에서 보는 바와 같이 두개의 테이블이 서로 합집합이 되었다. 이번에는 INTERSECT이다. INTERSECT는 위에서 언급한대로 교집합의 관계이다. 예제 3-34. INTERSECT의 예제 SELECT num, description FROM b INTERSECT SELECT c1, c2 FROM a; 마지막으로 EXCEPT는 차집합의 관계이다. 예제 3-35. EXCEPT의 예제 SELECT num, description FROM b EXCEPT SELECT c1, c2 FROM a; 이로써 간략하게 SELECT문장에 대해서 살펴 보았다. |
'PostgreSQL' 카테고리의 다른 글
[PostgreSQL] \? for help width psql commands (0) | 2008.04.24 |
---|---|
Postgresql 프로그래밍 (0) | 2008.04.23 |
Postgresql JDBC 드라이버 설치하기 (0) | 2007.06.13 |
PostgreSQL 7.2 설치하기 (0) | 2006.06.17 |
PostgreSQL 설치 (0) | 2006.06.11 |
RECENT COMMENT