74 - Crear tabla a partir de otras (create - insert - join) |
Tenemos la tabla "libros" y "editoriales" y queremos crear una tabla llamada "cantidadporeditorial" que contenga la cantidad de libros de cada editorial.
Eliminamos las tablas "libros", "editoriales" y "cantidadporeditorial" si existen:
drop table if exists libros, editoriales,cantidadporeditorial;
Creamos las tablas "libros" y "editoriales" con las siguientes estructuras:
create table libros( codigo int unsigned auto_increment, titulo varchar(40) not null, autor varchar(30) not null default 'Desconocido', codigoeditorial tinyint unsigned, precio decimal(5,2) unsigned, primary key (codigo) ); create table editoriales( codigo tinyint unsigned auto_increment, nombre varchar(20), primary key(codigo) );
La tabla "cantidadporeditorial" debe tener la siguiente estructura:
-nombre: nombre de la editorial, -cantidad: cantidad de libros.
No la creamos aún.
Ingresamos algunos registros para "libros" y "editoriales":
insert into editoriales (nombre) values('Emece'); insert into editoriales (nombre) values('Planeta'); insert into editoriales (nombre) values('Paidos'); insert into libros values (1,'El aleph','Borges',1,23.5); insert into libros values (2,'Alicia en el pais de las maravillas', 'Lewis Carroll',2,15); insert into libros values (3,'Matematica estas ahi','Paenza',1,34.6); insert into libros values (4,'Martin Fierro','Jose Hernandez',3,43.5); insert into libros values (5,'Martin Fierro','Jose Hernandez',2,12); insert into libros values (6,'Aprenda PHP','Mario Molina',3,21.8); insert into libros values (7,'Aprenda Java','Mario Molina',3,55.4); insert into libros values (8,'Alicia a traves del espejo','Lewis Carroll',1,18); insert into libros values (9,'Antologia poetica','Borges',3,47.9);
Podemos lograrlo en 3 pasos: 1º) crear la tabla "cantidadporeditorial", 2º) realizar la consulta en la tabla "libros" y "editoriales" para obtener la cantidad de libros de cada editorial agrupando por el nombre de la 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 "editoriales" y en el mismo momento insertaremos los registros:
create table cantidadporeditorial select e.nombre,count(*) as cantidad from libros as l join editoriales as e on l.codigoeditorial=e.codigo group by e.nombre;
La tabla "cantidadporeditorial" se ha creado con el campo llamado "nombre" seleccionado del campo "nombre" de "editoriales" 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;