database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Tutorials 4578 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 4578
SQL 이야기 2. INSERT INTO ... SELECT
작성자
김상기(ioseph)
작성일
2003-02-12 23:08
조회수
8,149

INSERT INTO 구문은 일반적으로 VALUES 로 그 값을 지정해서 사용합니다.

하지만, 작업을 하다보면, 테이블 간의 자료이동, 복사 등 INSERT 구문으로 처리해야함에도 불구하고, VALUES 값을 일일히 지정해 가면서 하기에는 너무 많은 잔손질이 필요한 작업들이 종종생깁니다.

 

이럴때, INSERT INTO ... SELECT 구문은 그 유용성을 한껏 발휘합니다.

 

기존 테이블의 자료를 새로운 테이블에 일괄적으로 넣는 방법에는 3가지 정도가 있습니다.

 

SELECT ... INTO 구문

CREATE TABLE ... AS

INSERT INTO ... SELECT 구문

 

윗 두 구문은 존재하지 않는 테이블을 만드는 것이고,

INSERT INTO ... SELECT 구문은 반드시 INTO 할 테이블이 존재하는 것이 차이겠지요.

하지만, 이것은 단지 일차적인 차이일 뿐이고, 내부적으로는 OID 문제에 있어서 엄청난 차이를 보입니다.

 

왜 간편한 SELECT ... INTO 구문이나, CREATE TABLE ... AS 구문을 이야기하지 않고, INSERT INTO ... SELECT 구문을 이야기하는가 하면, 바로 이 내부적인 엄청난 차이에서 얻는 잇점을 설명하기 위해서입니다.

 

INSERT INTO ... SELECT 는 말 그대로 SELECT한 결과 지정한 테이블의 데이터로 집어넣겠다는 것입니다.

여기서 전재되는 것은 그 '지정한 테이블'은 그 테이블 스키마에 독립적이고, 갖갖가지 제약조건, 외래키 등을 모두 가질 수 있을 것이며, 또한 해당 튜플에 대한 OID를 가지지 않을 수도 있을 것입니다.

이런 RDBM 적인 성격을 그대로 가지고 있으면서, 이 테이블에 다른 테이블에서 참조한 원하는 값을 집어 넣겠다는 것이지요.

 

SELECT ... INTO 나, CREATE TABLE ... AS 구문에서는 위에서 말한 그런 모든 것을 무시하고 - 어떠한 RDBM 적인 성격들을 완전히 무시하고, 단지 SELECT 한 결과를 튜플들의 자료형에 따라 가장 초보적인 테이블을 만들어냅니다.

 

물론 SELECT INTO나, CREATE TABLE AS 로 만드는 것이 더유용할 때로 있습니다. - 경험상 대부분 임시적이거나 통계적인 테이블들이 이런식으로 만들면 편하더군요.

하지만, 마스터성의 해당 데이터베이스의 주요 테이블들을 이런식으로 만들고 사용하게 된다면, 나중에 고생하게 됩니다.

 

즉, 그 주요 테이블들의 복사나 스키마 수정에 따른 대량 자료 이동이 있을 경우에는 반드시 INSERT INTO ... SELECT 구문을 숙지하셔서 이용하시면 도움이 많이 될겝니다.

 

초보적인 이야기지만,

이 구문을 사용할때, 꼭 주의 하셔야할 것이 데이터가 들어가는 테이블의 자료구조와 SELECT 되는 그 결과 자료구조가 완벽하게 동일해야된 다는 것을 명심해야겠지요.

[Top]
No.
제목
작성자
작성일
조회
4708PostgreSQL에서 Oracle 의 nvl() 함수 구현하기 [2]
정재익
2003-05-15
8197
4629PostgreSQL 7.3.1 윈도우2000에 설치하기
옥용수
2003-03-20
6982
45857.3의 table function 이야기 [5]
김상기
2003-02-18
12368
4578SQL 이야기 2. INSERT INTO ... SELECT
김상기
2003-02-12
8149
4551SQL 이야기 1. UNION [4]
김상기
2003-01-25
7879
4516PostgreSQL clog xlog 손상에 따른 복구 이야기
김상기
2003-01-08
9880
4488PostgreSQL 7.2.2-1 백업/복구
정재익
2002-12-19
10296
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.066초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다