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


Problema:

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

Eliminamos las tablas "libros" y "editoriales", si existen:

 drop table if exists libros, editoriales;

Creamos la tabla "libros" con la siguiente estructura:

 create table libros(
  codigo int unsigned auto_increment,
  titulo varchar(40) not null,
  autor varchar(30) not null default 'Desconocido',
  editorial varchar(20) not null,
  precio decimal(5,2) unsigned,
  primary key (codigo)
 );

La tabla "editoriales" debe tener la siguiente estructura:

 -nombre: nombre de la editorial.

No la creamos aún.

Ingresamos algunos registros para "libros":

 insert into libros values (1,'El aleph','Borges','Emece',23.5);
 insert into libros values (2,'Alicia en el pais de las maravillas',
                              'Lewis Carroll','Planeta',15);
 insert into libros values (3,'Matematica estas ahi','Paenza','Emece',34.6);
 insert into libros values (4,'Martin Fierro','Jose Hernandez','Paidos',43.5);
 insert into libros values (5,'Martin Fierro','Jose Hernandez','Planeta',12);
 insert into libros values (6,'Aprenda PHP','Mario Molina','Paidos',21.8);
 insert into libros values (7,'Aprenda Java','Mario Molina','Paidos',55.4);
 insert into libros values (8,'Alicia a traves del espejo','Lewis Carroll','Emece',18);
 insert into libros values (9,'Antologia poetica','Borges','Paidos',47.9);

Podemos lograrlo en 3 pasos: 1º) crear la tabla "editoriales", 2º) realizar la consulta en la tabla "libros" para obtener los nombres de las distintas editoriales y 3º) insertar los registros necesarios en la tabla "editoriales".

Pero lo haremos de la manera simplificada. Crearemos la tabla "editoriales" con el campo necesario consultando la tabla "libros" y en el mismo momento insertaremos 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".

Seleccionamos todos los registros de la tabla "editoriales":

 select * from editoriales;

Visualicemos la estructura de "editoriales":

 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.

Queremos crear una tabla llamada "cantidadporeditorial" que contenga la cantidad de libros de cada editorial.

Eliminamos la tabla "cantidadporeditorial" si existe:

 drop table if exists cantidadporeditorial;

La tabla "cantidadporeditorial" debe tener la siguiente estructura:

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

No la creamos aún.

Podemos lograrlo en 3 pasos: 1º) crear la tabla "cantidadporeditorial", 2º) 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()", 3º) insertar los registros necesarios en la tabla "cantidadporeditorial" con "insert into".

Pero lo haremos de la manera simplificada.

Crearemos la tabla "cantidadporeditorial" con los campos necesarios consultando la tabla "libros" y en el mismo momento insertaremos los registros:

 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".

Seleccionamos los registros de la tabla "cantidadporeditorial":

 select * from cantidadporeditorial;

Visualizamos la estructura de "cantidadporeditorial":

 describe cantidadporeditorial;



Retornar