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','2015','s');
insert into inscriptos values('22333444','tenis','2016','s');
insert into inscriptos values('22333444','natacion','2015','s');
insert into inscriptos values('24333444','tenis','2015','s');
insert into inscriptos values('24333444','natacion','2016','s');
insert into inscriptos values('25333444','tenis','2015','s');
insert into inscriptos values('25333444','tenis','2016','s');
insert into inscriptos values('25333444','basquet','2016','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,'2016-08-07',200);
insert into cursos (tema, dias,horario,clases,fechainicio,costo)
values('PHP básico','lunes,martes,miercoles','PM',18,'2016-08-14',200);
insert into cursos (tema, dias,horario,clases,fechainicio,costo)
values('PHP básico','sabado','AM',18,'2016-08-05',280);
insert into cursos (tema, dias,horario,clases,fechainicio,costo)
values('PHP avanzado','martes,jueves','AM',20,'2016-08-01',350);
insert into cursos (tema, dias,horario,clases,fechainicio,costo)
values('JavaScript','lunes,martes,miercoles','PM',15,'2016-09-11',150);
insert into cursos (tema, dias,horario,clases,fechainicio,costo)
values('Paginas web','martes,jueves','PM',10,'2016-08-08',250);
insert into cursos (tema, dias,horario,clases,fechainicio,costo)
values('Paginas web','sabado','AM',10,'2016-08-12',280);
insert into cursos (tema, dias,horario,clases,fechainicio,costo)
values('Paginas web','lunes,viernes','AM',10,'2016-08-21',200);
insert into cursos (tema, dias,horario,clases,fechainicio,costo)
values('Paginas web','lunes,martes,miercoles,jueves,viernes','AM',10,'2016-09-18',180);
insert into cursos (tema, dias,horario,clases,fechainicio,costo)
values('Paginas web','lunes,viernes','PM',10,'2016-09-25',280);
insert into cursos (tema, dias,horario,clases,fechainicio,costo)
values('JavaScript','lunes,martes,viernes,sabado','PM',12,'2016-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','2016-07-10','2016-07-12');
insert into prestamos
values('Manual de 1º grado','22333444','2016-07-20','2016-07-21');
insert into prestamos (titulo,documento,fechaprestamo)
values('Manual de 1º grado','23333444','2016-07-25');
insert into prestamos (titulo,documento,fechaprestamo)
values('Alicia en el pais de las maravillas','23333444','2016-07-28');
insert into prestamos (titulo,documento,fechaprestamo)
values('El aleph','25333444','2016-08-10');
insert into prestamos
values('Manual de 2º grado','23333444','2016-07-28','2016-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.