CUBRID 2008 R4.1 기초강좌
데이터 삽입 0 0 16,967

by 큐브리드 INSERT [2009.04.07]


  테이블에 새로운 레코드를 삽입할 때 INSERT문을 사용한다.

  하나의 INSERT문으로 여러 개의 레코드를 한번에 입력할 수 있다. 다만, 다른 테이블을 참조하는 테이블에 새로운 레코드가 삽입되는 경우, 참조 무결성 제약 조건을 위배할 수 있으므로 주의가 필요하다.

INSERT 
INTO 테이블(컬럼1, 컬럼2, …) 
VALUES (값1, 값2, …) 

  테이블에 한 번에 여러 개의 레코드들을 삽입하는 INSERT문은 아래와 같다.

INSERT 
INTO 테이블(컬럼1, 컬럼2, …) 
VALUES (값1, 값2, …), (값1, 값2, …), (값1, 값2, …), (값1, 값2, …); 

  또한, VALUES절을 대신하여 SELECT문을 지정하는 경우, 결과 레코드가 저장된다.

INSERT 
INTO 테이블(컬럼1, 컬럼2, …) 
SELECT … FROM … WHERE …; 

예제1

  athlete 테이블에 2008 베이징 올림픽 펜싱 은메달리스트 남현희 선수의 정보를 입력하고, 결과를 확인하라.

INSERT INTO athlete 
    (name, gender, nation_code, event) 
VALUES 
    ('Nam Hyun-Hee', 'W', 'KOR', 'Fencing'); 

-- 결과 확인
SELECT name, nation_code, event 
  FROM athlete 
ORDER BY code DESC LIMIT 5;

  INTO절에 컬럼을 열거하지 않으면, 테이블 생성시에 지정하였던 순서대로 컬럼 값을 열거해야 한다.

예제2

  오늘 올림픽이 개최했다고 가정하고 olympic 테이블에 관련 정보를 입력하라. 단, 개최 날짜와 폐막 날짜는 SYSDATE 함수를 사용하라.

INSERT INTO olympic 
    (host_year, host_nation, host_city, opening_date, closing_date) 
VALUES 
    (2009, 'Korea', 'Seoul', SYSDATE, SYSDATE + 20), 
    (2012, 'Korea', 'Seoul', SYSDATE, SYSDATE + 20);


-- 결과 확인
SELECT host_year, host_nation, opening_date, closing_date 
  FROM OLYMPIC 
ORDER BY host_year DESC LIMIT 5; 

  INSERT~VALUES 절에 콤마(,)로 구분하여 컬럼 값 리스트를 지정하여, 하나의 쿼리 실행으로 복수개의 레코드를 저장할 수 있다.

예제3

  NATION_CODE 컬럼과 GOLD 컬럼을 가진 NATION_GOLD_COUNT 테이블을 생성하고 PARTICIPANT 테이블에서 GOLD 개수가 30개 이상인 NATION_CODE와 GOLD를 값을 NATION_GOLD_COUNT 테이블에 추가하라.

-- 테이블 생성
CREATE TABLE nation_gold_count ( 
     nation_code VARCHAR(3), 
     gold        INT); 


-- 데이터 삽입
INSERT INTO nation_gold_count (nation_code, gold) 
SELECT nation_code, gold 
  FROM participant
 WHERE gold > 30; 


-- 결과 확인
SELECT * 
  FROM nation_gold_count;

  INSERT문에는 부질의문이 삽입될 수 있으며, 이 경우 SELECT된 결과 레코드가 지정된 테이블에 저장된다.

예제4

  NATION 테이블에 새로운 행을 추가 하되, VALUES 안의 값들 중에 올림픽 개최 날이 1988년인 나라 명과 경기장 이름이 Seoul Olympic Stadium인 주소를 SELECT문을 이용하여 값을 구한 다음 INSERT하는 쿼리를 만들어라.

-- 데이터 삽입
INSERT INTO nation VALUES( 
     'CIA', 
     (SELECT host_nation 
        FROM olympic 
       WHERE host_year=1988), 
     'Asia', 
     (SELECT address 
       FROM stadium 
      WHERE name='Seoul Olympic Stadium') ); 


-- 결과 확인
SELECT * 
  FROM nation 
 WHERE name='Korea';

  INSERT문 내에 SELECT문은 기본 키로 조회한 것이 아니므로 두 개 이상의 레코드가 검색될 가능성이 있다. 조회 결과가 단일 레코드가 아닌 SELECT 문을 VALUES절에 사용하는 경우, 에러가 발생할 것이다.

참고사이트

  - http://www.cubrid.com/zbxe/home

- 강좌 URL : http://www.gurubee.net/lecture/2052

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입