76 - Insertar registros con valores de otra tabla (insert - select)


Tenemos las tabla "libros" y "editoriales" creadas. La tabla "libros" contiene registros; "editoriales", no.

La tabla "libros" tiene la siguiente estructura:

 -codigo: int unsigned auto_increment,
 -titulo: varchar(30),
 -autor: varchar(30),
 -editorial: varchar(20),
 -precio: decimal(5,2) unsigned,
 -clave primaria: codigo.

La tabla "editoriales" tiene la siguiente estructura:

 -nombre: varchar(20).

Queremos insertar registros en la tabla "editoriales", los nombres de las distintas editoriales de las cuales tenemos libros.

Podemos lograrlo en 2 pasos, con varias sentencias:

1º paso: consultar los nombres de las distintas editoriales de "libros":

	 select distinct editorial
	  from libros;

obteniendo una salida como la siguiente:

	editorial
	_________
	Emece
	Paidos
	Planeta

2º paso: insertar los registros uno a uno en la tabla "editoriales":

	insert into editoriales (nombre) values('Emece');
	insert into editoriales (nombre) values('Paidos');
	insert into editoriales (nombre) values('Planeta');

O podemos lograrlo en un solo paso, realizando el "insert" y el "select" en una misma sentencia:

 insert into editoriales (nombre)
  select distinct editorial from libros;

Entonces, se puede insertar registros en una tabla con la salida devuelta por una consulta; para ello escribimos la consulta y le anteponemos "insert into", el nombre de la tabla en la cual ingresaremos los registros y los campos que se cargarán.

También podemos crear una tabla llamada "cantidadporeditorial":

 create table cantidadporeditorial(
  nombre varchar(20),
  cantidad smallint unsigned
 );

e ingresar registros a partir de una consulta a la tabla "libros":

 insert into cantidadporeditorial (nombre,cantidad)
  select editorial,count(*) as cantidad
  from libros
  group by editorial;

Si los campos presentados entre paréntesis son menos (o más) que las columnas devueltas por la consulta, aparece un mensaje de error y la sentencia no se ejecuta.

Retornar