73 - Crear tabla a partir de otra (create - insert)


Tenemos la tabla "libros" de una librería y queremos crear una tabla llamada "editoriales" que contenga los nombres de las editoriales.

La tabla "libros" tiene esta estructura:

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

La tabla "editoriales", que no existe, debe tener la siguiente estructura:

 -nombre: nombre de la editorial.

La tabla libros contiene varios registros.

Para guardar en "editoriales" los nombres de las editoriales, podemos hacerlo en 3 pasos:

1º paso: crear la tabla "editoriales":

	create table editoriales(
	 nombre varchar(20)
        );

2º paso: realizar la consulta en la tabla "libros" para obtener los nombres de las distintas editoriales:

	 select distinct editorial as nombre
	  from libros;

obteniendo una salida como la siguiente:

	editorial
	_________
	Emece
	Paidos
	Planeta

3º paso: insertar los registros necesarios en la tabla "editoriales":

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

Pero existe otra manera simplificando los pasos. Podemos crear la tabla "editoriales" con los campos necesarios consultando la tabla "libros" y en el mismo momento insertar la información:

 create table editoriales
  select distinct editorial as nombre
  from libros;

La tabla "editoriales" se ha creado con el campo llamado "nombre" seleccionado del campo "editorial" de "libros".

Entonces, se realiza una consulta de la tabla "libros" y anteponiendo "create table ..." se ingresa el resultado de dicha consulta en la tabla "editoriales" al momento de crearla.

Si seleccionamos todos los registros de la tabla "editoriales" aparece lo siguiente:

 nombre
 ______
 Emece
 Paidos
 Planeta

Si visualizamos la estructura de "editoriales" con "describe editoriales" vemos que el campo "nombre" se creó con el mismo tipo y longitud del campo "editorial" de "libros".

También podemos crear una tabla a partir de una consulta cargando los campos con los valores de otra tabla y una columna calculada. Veamos un ejemplo.

Tenemos la misma tabla "libros" y queremos crear una tabla llamada "librosporeditorial" que contenga la cantidad de libros de cada editorial.

La tabla "cantidadporeditorial", que no está creada, debe tener la siguiente estructura:

 -nombre: nombre de la editorial,
 -cantidad: cantidad de libros.

Podemos lograrlo en 3 pasos:

1º paso: crear la tabla "cantidadporeditorial":

	create table editoriales(
	 nombre varchar(20),
	 cantidad smallint
        );

2º paso: realizar la consulta en la tabla "libros" para obtener la cantidad de libros de cada editorial agrupando por "editorial" y calculando la cantidad con "count()":

	 select editorial,count(*)
	  from libros
	  group by editorial;

obteniendo una salida como la siguiente:

	nombre	cantidad
	________________
	Emece	3
	Paidos	4
	Planeta	2

3º paso: insertar los registros necesarios en la tabla "editoriales":

	insert into cantidadporeditorial values('Emece',3);
	insert into cantidadporeditorial values('Paidos',4);
	insert into cantidadporeditorial values('Planeta',2);

Pero existe otra manera simplificando los pasos. Podemos crear la tabla "cantidadporeditorial" con los campos necesarios consultando la tabla "libros" y en el mismo momento insertar la información:

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

La tabla "cantidadporeditorial" se ha creado con el campo llamado "nombre" seleccionado del campo "editorial" de "libros" y con el campo "cantidad" con el valor calculado con count() de la tabla "libros".

Entonces, se realiza una consulta de la tabla "libros" y anteponiendo "create table ..." se ingresa el resultado de dicha consulta en la tabla "cantidadporeditorial" al momento de crearla.

Si seleccionamos todos los registros de la tabla "cantidadporeditorial" aparece lo siguiente:

 nombre		cantidad
 _______________________
 Emece		3
 Paidos		4
 Planeta	2

Si visualizamos la estructura de "cantidadporeditorial" con "describe cantidadporeditorial", vemos que el campo "nombre" se creó con el mismo tipo y longitud del campo "editorial" de "libros" y el campo "cantidad" se creó como "bigint".

Retornar