Ejemplos de INSERT
La tabla CATEGORY de la base de datos TICKIT contiene las siguientes filas:
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)
Cree una tabla CATEGORY_STAGE con un esquema similar a la tabla CATEGORY, pero defina valores predeterminados para las columnas:
create table category_stage (catid smallint default 0, catgroup varchar(10) default 'General', catname varchar(10) default 'General', catdesc varchar(50) default 'General');
La siguiente instrucción INSERT selecciona todas las filas de la tabla CATEGORY y las inserta en la tabla CATEGORY_STAGE.
insert into category_stage (select * from category);
Los paréntesis alrededor de la consulta son opcionales.
Este comando inserta una nueva fila en la tabla CATEGORY_STAGE con un valor especificado para cada columna en orden:
insert into category_stage values (12, 'Concerts', 'Comedy', 'All stand-up comedy performances');
También puede insertar una nueva fila que combine valores específicos y valores predeterminados:
insert into category_stage values (13, 'Concerts', 'Other', default);
Ejecute la siguiente consulta para devolver las filas insertadas:
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)
En los siguientes ejemplos se muestran algunas instrucciones INSERT VALUES de varias filas. El primer ejemplo inserta valores CATID específicos para dos filas y los valores predeterminados para las otras columnas de ambas filas.
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)
El próximo ejemplo inserta tres filas con diversas combinaciones de valores predeterminados y específicos:
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)
El primer conjunto de VALUES en este ejemplo produce los mismos resultados que especificar DEFAULT VALUES para una instrucción INSERT de una sola fila.
En los siguientes ejemplos se muestra un comportamiento INSERT cuando una tabla tiene una columna IDENTITY. Primero, cree una nueva versión de la tabla CATEGORY, luego inserte filas en la tabla desde 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;
Tenga en cuenta que no puede insertar valores enteros específicos en la columna CATID IDENTITY. Los valores de la columna IDENTITY se generan automáticamente.
En el siguiente ejemplo, se demuestra que las subconsultas no pueden utilizarse como expresiones en instrucciones INSERT VALUES de varias filas:
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
En el siguiente ejemplo se muestra una inserción en una tabla temporal rellena con datos de la tabla venue
mediante la cláusula WITH SELECT
. Para obtener más información sobre la tabla venue
, consulte Base de datos de muestra.
Primero, cree la tabla temporal #venuetemp
.
CREATE TABLE #venuetemp AS SELECT * FROM venue;
Muestre las filas de la tabla #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 ...
Inserte 10 filas duplicadas en la tabla #venuetemp
mediante la cláusula WITH SELECT
.
INSERT INTO #venuetemp (WITH venuecopy AS (SELECT * FROM venue) SELECT * FROM venuecopy ORDER BY 1 LIMIT 10);
Muestre las filas de la tabla #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 ...