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 表类似的 schema 来创建 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
...