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