본문 바로가기

Programming/Network/Server/DB

[SQL] 데이터 정의 및 타입 - INSERT

1. 데이터 삽입(INSERT INTO)
테이블 이름은 RENAME 구문을 사용하여 변경할 수 있다.
1) 구문
INSERT INTO table_name [ ( attribute_list ) ] VALUES ( value_list ) [ ; ]
INSERT INTO table_name DEFAULT [ VALUES ] [ ; ]
 table_name : 데이터를 생성하고자 하는 테이블 이름을 지정한다.
 attribute_list : 입력하고자 하는 값의 컬럼 이름을 지정한다. 만약 attribute_list를 명시하지 않으면 테이블에 정의된 모든 컬럼에 대한 값을 채워야 한다. 만약attribute_list에 일부 컬럼만 명시가 된다면 나머지 컬럼에는 정의된 디폴트 값이 할당되며 디폴트 값이 없을 경우 NULL 값이 할당된다.
 value_list attribute_list 의 컬럼에 대응되는 값을 명시한다. value_list 의 항목은 표현식, 메소드 호출일 수 있고, attribute_list 의 속성 위치와 도메인 형식이 일치해야 한다. 각 이름과 값은 콤마(,)로 구별된다.
 DEFAULT : 두 번째 구문 형식의 INSERT 문은 각각의 속성에 디폴트 값을 할당하여 데이터를 생성한다. 만약 테이블 정의에서 컬럼에 디폴트 값이 설정되어 있지 않으면 그 컬럼의 값으로 NULL이 할당된다.
2) 예제
 다음은 athlete 테이블에 2008 베이징 올림픽 펜싱 은메달리스트 남현희 선수의 정보를 입력하는 예제이다. code 컬럼은 auto_increment이므로 값을 입력하지 않는다. 자세한 내용은 컬럼에서 자동 증가 특성 내용을 참조한다.
INSERT INTO athlete (name, gender, nation_code, event) VALUES ('Nam Hyun-Hee','W', 'KOR', 'Fencing');
 다음은 olympic 테이블에 2008 베이징 올림픽의 대략적인 정보를 넣는 예제이다.
INSERT INTO olympic (host_year, host_nation, host_city, opening_date, closing_date) VALUES (2008, 'China', 'beijing', '2008-08-08','2008-08-24');
 다음은 DEFAULT를 이용한 데이터 삽입을 보여주는 예제이다. 예제를 위해 de_test 테이블을 생성하고 데이터를 삽입한다. 아래와 같이 설정된 디폴트 값이 자동으로 삽입된 것을 알 수 있다.
CREATE TABLE de_test(
   a INT DEFAULT 10,
   b INT DEFAULT 20,
   c CHAR(1) DEFAULT 'M'
);
INSERT INTO de_test DEFAULT;

csql> SELECT * FROM de_test;
csql> ;x
=== <Result of SELECT Command in Line 1> ===
   a    b    c
===============
   10   20   'M'
1 rows selected.
2. 질의를 이용한 INSERT
INSERT 문에 질의를 사용하면 하나의 INSERT 문으로 다수의 데이터를 생성할 수 있다.
다른 테이블로부터 특정 검색 조건을 만족하는 데이터를 추출하고 싶은 경우 질의를 이용하면 조건을 만족하는 모든 데이터는 INSERT 문에 명시된 테이블의 데이터가 된다.
1) 구문
INSERT INTO table_name [ (attribute_list ) ] query_statement [ ; ]
 table_name : 데이터를 삽입할 테이블의 이름을 지정한다.
 attribute_list : 입력하고자 하는 값들의 컬럼 이름을 지정한다. 이 곳에 정의된 데이터 타입은 query_statement의 결과의 데이터 타입과 일치해야 한다.
 query_statement : 삽입할 데이터를 추출하는 질의문을 정의한다.
2) 예제
 다음은 man 테이블을 생성하고 athlete 테이블에서 남자 선수들의 이름을 조회하여 결과를 삽입한다. 하나의 INSERT 문을 이용하여 4087건의 데이터가 삽입되는 것을 알 수 있다.
CREATE TABLE man (
   name VARCHAR(40)
);

csql> INSERT INTO man (name) SELECT name FROM athlete WHERE gender ='M';
csql> ;x
4087 rows inserted.
Current transaction has been committed.
1 command(s) successfully processed.
3. 부질의를 이용한 INSERT
INSERT 문의 VALUES 항목의 하나로 질의를 포함하여 데이터를 삽입할 수 있다.
1) 구문
INSERT INTO table_name [ ( attribute_list ) ]
VALUES value_listquery_statement ) [ ; ]
 table_name : 데이터를 삽입할 테이블의 이름을 지정한다.
 attribute_list : 입력하고자 하는 값들의 컬럼 이름을 지정한다.
 value_list attribute_list의 컬럼에 대응되는 값들을 명시한다.
 query_statement : 부질의를 정의한다. 부질의의 결과는 해당 컬럼에 대응되는 하나의 값이어야 한다.
2) 예제
 다음은 athlete 테이블에 2008 베이징 올림픽 유도 73kg 은메달 리스트 왕기춘 선수의 정보를 입력하는 예제이다.
INSERT INTO athlete VALUES (16800, 'Wang Ki-chun','M',SELECT code FROM nation WHERE name ='Korea', 'Judo');

  ================================================ 
    * 데이터베이스 정보공유 커뮤니티 oracleclub.com 
    * 강좌 작성자 : 모현철 (hcmo_at_cubrid.com) 
    * 큐브리드 다운로드 URL : http://www.cubrid.com/zbxe/download_2008 
  ================================================