INSERT 예
TICKIT 데이터베이스의 CATEGORY 테이블은 다음 행을 포함합니다.
catid | catgroup | catname | catdesc -------+----------+-----------+-------------------------------------------- 1 | Sports | MLB | Major League Baseball 2 | Sports | NHL | National Hockey League 3 | Sports | NFL | National Football League 4 | Sports | NBA | National Basketball Association 5 | Sports | MLS | Major League Soccer 6 | Shows | Musicals | Musical theatre 7 | Shows | Plays | All non-musical theatre 8 | Shows | Opera | All opera and light opera 9 | Concerts | Pop | All rock and pop music concerts 10 | Concerts | Jazz | All jazz singers and bands 11 | Concerts | Classical | All symphony, concerto, and choir concerts (11 rows)
CATEGORY 테이블에 대한 유사한 스키마를 가진 CATEGORY_STAGE 테이블을 생성하되, 열에 대한 기본값을 정의합니다.
create table category_stage (catid smallint default 0, catgroup varchar(10) default 'General', catname varchar(10) default 'General', catdesc varchar(50) default 'General');
다음 INSERT 문은 CATEGORY 테이블에서 모든 행을 선택하여 CATEGORY_STAGE 테이블로 삽입합니다.
insert into category_stage (select * from category);
쿼리 주변의 괄호는 선택 사항입니다.
이 명령은 각 열에 대해 순서대로 값이 지정된 CATEGORY_STAGE 테이블에 새 행을 삽입합니다.
insert into category_stage values (12, 'Concerts', 'Comedy', 'All stand-up comedy performances');
특정 값과 기본값을 결합하는 새로운 행을 삽입할 수도 있습니다.
insert into category_stage values (13, 'Concerts', 'Other', default);
다음 쿼리를 실행하여 삽입된 행을 반환합니다.
select * from category_stage where catid in(12,13) order by 1; catid | catgroup | catname | catdesc -------+----------+---------+---------------------------------- 12 | Concerts | Comedy | All stand-up comedy performances 13 | Concerts | Other | General (2 rows)
다음 예에서는 몇 가지 다중 행 INSERT VALUES 문을 보여줍니다. 첫 번째 예에서는 두 행에 대한 특정 CATID 값과 다른 열의 기본값을 두 행에 모두 삽입합니다.
insert into category_stage values (14, default, default, default), (15, default, default, default); select * from category_stage where catid in(14,15) order by 1; catid | catgroup | catname | catdesc -------+----------+---------+--------- 14 | General | General | General 15 | General | General | General (2 rows)
그 다음 예에서는 특정한 값과 기본값이 다양하게 조합된 세 개의 행을 삽입합니다.
insert into category_stage values (default, default, default, default), (20, default, 'Country', default), (21, 'Concerts', 'Rock', default); select * from category_stage where catid in(0,20,21) order by 1; catid | catgroup | catname | catdesc -------+----------+---------+--------- 0 | General | General | General 20 | General | Country | General 21 | Concerts | Rock | General (3 rows)
이 예에서 첫 번째 VALUES 집합은 단일 행 INSERT 문에 대한 DEFAULT VALUES를 지정하는 것과 똑같은 결과를 만들어냅니다.
다음 예에서는 테이블에 IDENTITY 열이 있을 때 INSERT의 동작을 보여줍니다. 먼저 CATEGORY 테이블의 새 버전을 만든 다음, CATEGORY에서 테이블에 행을 삽입합니다.
create table category_ident (catid int identity not null, catgroup varchar(10) default 'General', catname varchar(10) default 'General', catdesc varchar(50) default 'General'); insert into category_ident(catgroup,catname,catdesc) select catgroup,catname,catdesc from category;
참고로, 특정한 정수 값을 CATID IDENTITY 열에 삽입할 수 없습니다. IDENTITY 열 값은 자동으로 생성됩니다.
다음 예에서는 다중 행 INSERT VALUES 문에 하위 쿼리를 표현식으로 사용할 수 없음을 보여줍니다.
insert into category(catid) values ((select max(catid)+1 from category)), ((select max(catid)+2 from category)); ERROR: can't use subqueries in multi-row VALUES
다음 예에서는 WITH SELECT
절을 사용하여 venue
테이블의 데이터로 채워진 임시 테이블에 삽입하는 방법을 보여줍니다. venue
테이블에 대한 자세한 내용은 샘플 데이터베이스 단원을 참조하세요.
먼저 임시 테이블 #venuetemp
를 생성합니다.
CREATE TABLE #venuetemp AS SELECT * FROM venue;
#venuetemp
테이블의 행을 나열합니다.
SELECT * FROM #venuetemp ORDER BY venueid;
venueid | venuename | venuecity | venuestate| venueseats --------+--------------------------+------------+-----------+------------ 1 Toyota Park Bridgeview IL 0 2 Columbus Crew Stadium Columbus OH 0 3 RFK Stadium Washington DC 0 4 CommunityAmerica Ballpark Kansas City KS 0 5 Gillette Stadium Foxborough MA 68756 ...
WITH SELECT
절을 사용하여 #venuetemp
테이블에 10개의 중복 행을 삽입합니다.
INSERT INTO #venuetemp (WITH venuecopy AS (SELECT * FROM venue) SELECT * FROM venuecopy ORDER BY 1 LIMIT 10);
#venuetemp
테이블의 행을 나열합니다.
SELECT * FROM #venuetemp ORDER BY venueid;
venueid | venuename | venuecity | venuestate| venueseats --------+--------------------------+------------+-----------+------------ 1 Toyota Park Bridgeview IL 0 1 Toyota Park Bridgeview IL 0 2 Columbus Crew Stadium Columbus OH 0 2 Columbus Crew Stadium Columbus OH 0 3 RFK Stadium Washington DC 0 3 RFK Stadium Washington DC 0 4 CommunityAmerica Ballpark Kansas City KS 0 4 CommunityAmerica Ballpark Kansas City KS 0 5 Gillette Stadium Foxborough MA 68756 5 Gillette Stadium Foxborough MA 68756 ...