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


Problema:
Un comercio guarda la información de sus ventas en una tabla llamada "facturas".

1- Elimine la tabla si existe.

2- Cree la tabla con la siguiente estructura:
 create table facturas(
  numero int(10) zerofill auto_increment,
  numeroitem smallint unsigned not null,
  descripcion varchar(30),
  precioporunidad decimal(5,2) unsigned,
  cantidad tinyint unsigned,
  primary key (numero,numeroitem) 
 );

3- Ingrese algunos registros:
 insert into facturas (numero,numeroitem,descripcion,precioporunidad,cantidad)
  values(100,1,'escuadra 20 cm.',2.50,20);
 insert into facturas (numero,numeroitem,descripcion,precioporunidad,cantidad)
  values(100,2,'escuadra 50 cm.',5,30);
 insert into facturas (numero,numeroitem,descripcion,precioporunidad,cantidad)
  values(100,3,'goma lapiz-tinta',0.35,100);
 insert into facturas (numero,numeroitem,descripcion,precioporunidad,cantidad)
  values(102,1,'lapices coloresx6',4.40,50);
 insert into facturas (numero,numeroitem,descripcion,precioporunidad,cantidad)
  values(102,2,'lapices coloresx12',8,60);
 insert into facturas (numero,numeroitem,descripcion,precioporunidad,cantidad)
  values(255,1,'lapices coloresx24',12.35,100);
 insert into facturas (numero,numeroitem,descripcion,precioporunidad,cantidad)
  values(567,1,'compas plastico',12,50);
 insert into facturas (numero,numeroitem,descripcion,precioporunidad,cantidad)
  values(567,2,'compas metal',18.90,80);

4- Se quiere guardar la siguiente información en una tabla denominada "montofacturas":
 -numero: número de factura,
 -total: total en dinero de todos los items de cada factura (precioporunidad x cantidad).

5- Elimine la tabla "montofacturas" si existe.

6- Realice una consulta de la tabla "facturas", agrupando por "numero", en la cual aparezca el 
número de factura y el monto total de todos sus items:
  select numero,
   sum(precioporunidad*cantidad) as total
   from facturas
   group by numero;

7- Cree la tabla "montofacturas" a partir de la consulta anterior:
 create table montofacturas
  select numero,
   sum(precioporunidad*cantidad) as total
   from facturas
   group by numero;

8- Muestre todos los registros de la tabla "montofacturas".

9- Visualice la estructura de la nueva tabla creada.



 

Otros problemas:
A) Una empresa registra los datos de sus empleados en una tabla llamada "empleados".

1- Elimine la tabla "empleados" si existe.

2- Cree la tabla:
 create table empleados(
  documento char(8) not null,
  nombre varchar(30) not null,
  sexo char(1),
  domicilio varchar(30),
  fechaingreso date,
  primary key(documento)
 );

3- Ingrese algunos registros:
 insert into empleados (documento,nombre,sexo,domicilio,fechaingreso)
  values ('22333111','Juan Perez','m','Colon 123','1990-02-01');
 insert into empleados (documento,nombre,sexo,domicilio,fechaingreso)
  values ('25444444','Susana Morales','f','Avellaneda 345','1995-04-01');
 insert into empleados (documento,nombre,sexo,domicilio,fechaingreso)
  values ('20111222','Hector Pereyra','m','Caseros 987','1995-04-01');
 insert into empleados (documento,nombre,sexo,domicilio,fechaingreso)
  values ('30000222','Luis Luque','m','Urquiza 456','1980-09-01');
 insert into empleados (documento,nombre,sexo,domicilio,fechaingreso)
  values ('20555444','Maria Laura Torres','f','San Martin 1122','2000-05-15');
 insert into empleados (documento,nombre,sexo,domicilio,fechaingreso)
  values ('30000234','Alberto Soto','m','Peru 232','2003-08-15');
 insert into empleados (documento,nombre,sexo,domicilio,fechaingreso)
  values ('20125478','Ana Gomez','f','Sarmiento 975','2004-06-14');
 insert into empleados (documento,nombre,sexo,domicilio,fechaingreso)
  values ('24154269','Ofelia Garcia','f','Triunvirato 628','2004-09-23');
 insert into empleados (documento,nombre,sexo,domicilio,fechaingreso)
  values ('30154269','Oscar Mendez','m','Colon 1245','2004-06-23');

4- La empresa necesita almacenar en una tabla llamada "ingresos" la cantidad de empleados que 
ingresaron a la empresa por año. Muestre la información desde la tabla "empleados":
 select year(fechaingreso),count(*)
  from empleados
  group by year(fechaingreso);

5- Elimine la tabla "ingresos" si existe.

6- Cree la tabla "ingresos" consultando la tabla "empleados":
 create table ingresos
  select year(fechaingreso) as año,
   count(*) as cantidad
   from empleados
   group by year(fechaingreso);

7- Seleccione todos los registros y campos de la tabla "ingresos".

8- Vea la estructura de la tabla "ingresos".


B) Un club dicta clases de distintos deportes a sus socios. Guarda la información de las 
inscripciones en una tabla denominada "inscriptos".

1- Elimine la tabla, si existe.

2- Cree la tabla:
 create table inscriptos(
  documento char(8) not null,
  deporte varchar(20) not null,
  año year not null,
  cuota char(1), /*'s' o 'n', si esta paga o no*/
  primary key(documento,deporte,año)
 );

3- Ingrese los siguientes registros:
 insert into inscriptos values('22333444','tenis','2005','s');
 insert into inscriptos values('22333444','tenis','2006','s');
 insert into inscriptos values('22333444','natacion','2005','s');
 insert into inscriptos values('24333444','tenis','2005','s');
 insert into inscriptos values('24333444','natacion','2006','s');
 insert into inscriptos values('25333444','tenis','2005','s');
 insert into inscriptos values('25333444','tenis','2006','s');
 insert into inscriptos values('25333444','basquet','2006','s');

4- El club desea saber cuántos socios se han inscripto en cada deporte cada año:
 select deporte,año,count(*)
  from inscriptos
  group by deporte,año;

5- El club quiere almacenar esa información en una tabla. Elimine la 
tabla "inscriptospordeporteporaño", si existe.

6- Cree la tabla utilizando la consulta del punto 5:
 create table inscriptospordeporteporaño
  select deporte,año,count(*)
  from inscriptos
  group by deporte,año;

7- Muestre todos los registros de la nueva tabla.

8- El club desea saber cuántas veces se ha inscripto una persona en algún deporte:
 select documento,count(*)
  from inscriptos
  group by documento;

9- Elimine la tabla "cantidadinscripcionesporsocio" si existe.

10- Guarde la información anterior en una tabla llamada "cantidadinscripcionesporsocio", creándola 
a partir de la consulta del punto 8:
 create table cantidadinscripcionesporsocio
 select documento,count(*)
  from inscriptos
  group by documento;


C) Una academia de enseñanza dicta distintos cursos de informática. Los cursos se dictan por la 
mañana (de 8 a 12 hs.) o por la tarde (de 16 a 20 hs.), distintos días a la semana. La academia 
guarda los datos de los cursos en una tabla llamada "cursos" en la cual almacena el código del 
curso, el tema, los días de la semana que se dicta, el horario, por la mañana (AM) o por la tarde 
(PM), la cantidad de clases que incluye cada curso (clases), la fecha de inicio y el costo del 
curso.

1- Elimine la tabla si existe.

2- Cree la tabla:
 create table cursos(
  codigo tinyint unsigned auto_increment,
  tema varchar(20) not null,
  dias set ('lunes','martes','miercoles','jueves','viernes','sabado') not null,
  horario enum ('AM','PM') not null,
  clases tinyint unsigned,
  fechainicio date,
  costo decimal(5,2) unsigned,
  primary key(codigo)
 );
 
3- Ingrese los siguientes registros:
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('PHP básico','lunes,martes,miercoles','AM',18,'2006-08-07',200);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('PHP básico','lunes,martes,miercoles','PM',18,'2006-08-14',200);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('PHP básico','sabado','AM',18,'2006-08-05',280);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('PHP avanzado','martes,jueves','AM',20,'2006-08-01',350);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('JavaScript','lunes,martes,miercoles','PM',15,'2006-09-11',150);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('Paginas web','martes,jueves','PM',10,'2006-08-08',250);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('Paginas web','sabado','AM',10,'2006-08-12',280);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('Paginas web','lunes,viernes','AM',10,'2006-08-21',200);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('Paginas web','lunes,martes,miercoles,jueves,viernes','AM',10,'2006-09-18',180);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('Paginas web','lunes,viernes','PM',10,'2006-09-25',280);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('JavaScript','lunes,martes,viernes,sabado','PM',12,'2006-09-18',150);

4- Muestre la cantidad de cursos por horario:
 select horario,count(*)
  from cursos
  group by horario;

5- Elimine la tabla "cantidadcursosporhorario" si existe.

6- Guarde la información obtenida en el punto 4 en una tabla llamada "cantidadcursosporhorario" 
creando la tabla a partir de aquella consulta:
 create table cantidadcursosporhorario
  select horario,count(*) as cantidad
  from cursos
  group by horario;

7- Vea todos los registros de la tabla creada anteriormente.

8- Visualice la estructura de la tabla "cantidadcursosporhorario".

9- Se quiere saber el promedio de clases por tema:
 select tema,avg(clases)
  from cursos
  group by tema;

10- Elimine la tabla "clasesportema" si existe.

11- Cree la tabla "clasesportema" a partir de la consulta del punto 9:
 create table clasesportema
 select tema,avg(clases) as promedioclases
  from cursos
  group by tema;

12- Vea la estructura de la tabla creada anteriormente y realice una consulta mostrando todos los 
registros.

13- Muestre los distintos temas de las clases:
 select distinct tema
  from cursos;

14- Elimine la tabla "temas" si existe.

15- Cree la tabla "temas" a partir de la consulta del punto 12:
 create table temas
  select distinct tema
  from cursos;

16- Vea todos los registros de la tabla creada anteriormente.


D) Un profesor guarda en una tabla llamada "notas" las notas de los alumnos de un curso.

1- Elimine la tabla "notas" si existe.

2- Cree la tabla con la siguiente estructura:
 create table notas(
  documento char(8) not null,
  nombre varchar(30),
  nota decimal(4,2) unsigned
 );
Algunos alumnos tienen más notas que otros porque presentaron trabajos especiales.

3- Ingrese los siguientes registros:
  insert into notas values('30333444','Juan Perez',8);
  insert into notas values('30433444','Ana Maria Garcia',7.5);
  insert into notas values('30533444','Marcelo Morales',3.5);
  insert into notas values('30633444','Fabiola Juarez',4.5);
  insert into notas values('30333444','Juan Perez',7.8);
  insert into notas values('30433444','Ana Maria Garcia',6);
  insert into notas values('30533444','Marcelo Morales',4.2);
  insert into notas values('30633444','Fabiola Juarez',7);
  insert into notas values('30333444','Juan Perez',9);
  insert into notas values('30433444','Ana Maria Garcia',5.8);
  insert into notas values('30633444','Fabiola Juarez',2);
  insert into notas values('30333444','Juan Perez',10);
  insert into notas values('30633444','Fabiola Juarez',6.7);

4- El profesor necesita generar una tabla llamada "promedios" que contenga el documento del alumno y 
el promedio de sus notas. Cree la tabla con los campos "documento" y "promedio" realizando la 
consulta necesaria a la tabla "notas":
 create table promedios
  select documento,nombre,avg(nota) as promedio
  from notas
  group by documento;

5- Vea los registros de "promedios".

6- Vea la estructura de la tabla "promedios".

7- Agrupe por documento y seleccione el documento y nombre de los alumnos aprobados (promedio mayor 
o igual a 4):
 select documento,nombre
  from notas
  group by documento
  having avg(nota)>=4;

8- Elimine la tabla "aprobados" si existe.

9- Cree una tabla llamada "aprobados" donde guarde el resultado de la consulta anterior, es decir, 
documento y nombre de los alumnos que pasan de curso por estar aprobados:
 create table aprobados
  select documento,nombre
  from notas
  group by documento
  having avg(nota)>=4;


E) Un banco tiene registrados las cuentas corrientes de sus clientes en una tabla llamada "cuentas".

1- Elimine la tabla, si existe.

2- Cree la tabla:
 create table cuentas(
  numero int(8) zerofill auto_increment,
  documento char(8) not null,
  nombre varchar(30),
  saldo decimal(9,2),
  primary key(numero)
 );

3- Ingrese los siguientes registros:
 insert into cuentas values(1234,'22333444','Juan Perez',2000.60);
 insert into cuentas values(2566,'23333444','Maria Pereyra',5050);
 insert into cuentas values(5987,'24333444','Marcos Torres',200);
 insert into cuentas values(14434,'25333444','Ana Juarez',8000.60);
 insert into cuentas values(28566,'23333444','Maria Pereyra',8050);
 insert into cuentas values(35987,'24333444','Marcos Torres',2000);

4- Agrupe por documento y muestre el documento del cliente, en una columna llamada "cantidad" 
calcule la cantidad de cuentas de cada cliente y en otra columna llamada "total" calcule la suma de 
todas las cuentas de cada cliente:
 select documento
  count(*) as cantidad,
  sum(saldo) as total
  from cuentas
  group by documento;

5- Elimine la tabla "cuentasporcliente", si existe.

6- Cree la tabla "cuentasporcliente" en la cual guarde el documento, la cantidad de cuentas que 
tiene en el banco y la suma de las mismas:
 create table cuentasporcliente
  select documento
  count(*) as cantidad,
  sum(saldo) as total
  from cuentas
  group by documento;

7- Vea los registros de "cuentasporcliente".

8-Vea la estructura de la tabla "cuentasporcliente".


F) Una pequeña biblioteca de barrio registra los préstamos de sus libros en una tabla 
llamada "prestamos".

1- Elimine la tabla, si existe.

2- Cree la tabla:
 create table prestamos(
  titulo varchar(40) not null,
  documento char(8) not null,
  fechaprestamo date not null,
  fechadevolucion date,
  primary key(titulo,fechaprestamo)
 );

3- Ingrese algunos registros:
 insert into prestamos
  values('Manual de 1º grado','22333444','2006-07-10','2006-07-12');
 insert into prestamos
  values('Manual de 1º grado','22333444','2006-07-20','2006-07-21');
 insert into prestamos (titulo,documento,fechaprestamo)
  values('Manual de 1º grado','23333444','2006-07-25');
 insert into prestamos (titulo,documento,fechaprestamo)
  values('Alicia en el pais de las maravillas','23333444','2006-07-28');
 insert into prestamos (titulo,documento,fechaprestamo)
  values('El aleph','25333444','2006-08-10');
 insert into prestamos
  values('Manual de 2º grado','23333444','2006-07-28','2006-07-29');

4- Muestre los títulos de los libros que no se han devuelto y la fecha de préstamo:
 select titulo,fechaprestamo
  from prestamos
  where fechadevolucion is null;

5- Elimine la tabla "prestados" si existe.

6- Cree la tabla "prestados" e ingrese al momento de crearla el resultado de la consulta del punto 
4:
 create table prestados
  select titulo,fechaprestamo
  from prestamos
  where fechadevolucion is null;

7- Muestre todos los registros de la tabla "prestados".

8- Muestre el documento, la primera fecha de préstamo y cantidad de libros no devueltos de todos 
los morosos:
 select documento, min(fechaprestamo),count(*)
  from prestamos
  where fechadevolucion is null
  group by documento;

9- Elimine la tabla "morosos" si existe.

10- Cree una tabla llamada "morosos" con los campos "documento", "desde" (fecha de préstamo desde 
la cual es moroso) y "cantidad" (cantidad de libros que debe) y guarde el resultado de la consulta 
del punto 8:
 create table morosos
  select documento,
  min(fechaprestamo) as desde,
  count(*) as cantidad
  from prestamos
  where fechadevolucion is null
  group by documento;


G) Un pequeño restaurante tiene almacenados los nombres, rubros y precios de sus comidas en una 
tabla llamada "comidas".

1- Elimine la tabla si existe.

2- Cree la tabla con esta estructura:
 create table comidas(
  codigo tinyint unsigned auto_increment,
  nombre varchar(30),
  rubro enum ('entrada','principal','postre'),
  precio decimal (5,2) unsigned,
  primary key(codigo)
 );

3- Ingrese algunos registros:
 insert into comidas (nombre,rubro,precio)
  values('fiambres',1,2.5);
 insert into comidas (nombre,rubro,precio)
  values('arroz',1,1.6);
 insert into comidas (nombre,rubro,precio)
  values('sopa',1,2.4);
 insert into comidas (nombre,rubro,precio)
  values('milanesa y fritas',2,3.4);
 insert into comidas (nombre,rubro,precio)
  values('cuarto de pollo',2,2.5);
 insert into comidas (nombre,rubro,precio)
  values('hamburguesa',2,2.8);
 insert into comidas (nombre,rubro,precio)
  values('flan',3,1);
 insert into comidas (nombre,rubro,precio)
  values('porcion de torta',3,2.1);
 insert into comidas (nombre,rubro,precio)
  values('gelatina',3,0.9);

4- Muestre todos los registros:

5- Realice un "cross join" combinando entrada, plato principal y postre:
 select c1.nombre,c2.nombre,c3.nombre,
  c1.precio+c2.precio+c3.precio as total
  from comidas as c1
  cross join comidas as c2
  cross join comidas as c3
  where c1.rubro=1 and
  c2.rubro=2 and
  c3.rubro=3;

6- Elimine la tabla "menues" si existe.

7- Cree la tabla "menues" para guardar el resultado de la consulta del punto 5:
 create table menues
  select c1.nombre as entrada,
  c2.nombre as principal,
  c3.nombre as postre,
  c1.precio+c2.precio+c3.precio as total
  from comidas as c1
  cross join comidas as c2
  cross join comidas as c3
  where c1.rubro=1 and
  c2.rubro=2 and
  c3.rubro=3;

8- Visualice la estructura de la tabla "menues".

9- Vea todos los registros de la nueva tabla creada.

Retornar