Taller de MySQL Numero 7
Taller de MySQL Numero 7
Taller de MySQL Numero 7
14- Ingrese un valor invlido, no presente en la lista de "pension" (guarda una cadena
vaca):
insert into viajes (nombre,pension,hotel,dias,salida)
values ('Caribe especial','ninguna','4',18,'2005-11-01');
Una inmobiliaria vende inmuebles; los inmuebles pueden ser: casa, departamento, local o
terreno.
Una academia de enseanza dicta distintos cursos de informtica. Los cursos se dictan por
la maana (de 8 a 12 hs.) o por la tarde (de 16 a 20 hs.), distintos das a la semana. La
academia guarda los datos de los cursos en una tabla llamada "cursos" en la cual almacena
el cdigo del curso, el tema, los das de la semana que se dicta, el horario, por la
maana (AM) o por la tarde (PM), la cantidad de clases que incluye cada curso (clases),
la fecha de inicio y el costo del curso.
27- Una persona quiere inscribirse en un curso de "PHP" y slo tiene disponibles los
sbados. Localice los cursos de "PHP" que se dictan solamente los sbados:
select * from cursos
where tema like '%PHP%' and
Taller No. 7 Instructor: Miguel Romero Pearanda
dias='sabado';
28- Otra persona quiere aprender a disear pginas web, tiene disponibles todas las
maanas excepto los mircoles. Vea si existe algn curso que cumpla con sus necesidades:
select * from cursos
where tema like '%paginas web%' and
horario='AM' and
dias not like '%miercoles%';
29- Otra persona necesita aprender JavaScript, tiene disponibles todos las tardes excepto
los jueves y quiere un curso que no supere las 15 clases para el mes de setiembre. Busque
algn curso para esta persona:
select * from cursos
where tema='%javascript%' and
horario='PM' and
not find_in_set('jueves',dias)>0 and
clases<=15 and
month(fechainicio)=9;
36- Muestre los inmuebles que no tengan ascensor y si estacionamiento, adems de otros
detalles:
Taller No. 7 Instructor: Miguel Romero Pearanda
select * from inmuebles
where detalles not like '%ascensor%' and
detalles like '%estacionamiento%';
45- Seleccione todos los viajes que no incluyan "Acapulco" y que incluyan pensin
completa:
select * from viajes
where ciudades not like '%Acapulco%' and
pension='completa';
Taller No. 7 Instructor: Miguel Romero Pearanda
46- Muestre los viajes que incluyan "Puerto Vallarta" o "Cuernavaca":
select * from viajes
where find_in_set('Cuernavaca',ciudades)>0 or
find_in_set('Puerto Vallarta',ciudades)>0;
Una inmobiliaria guarda los datos de sus inmuebles en venta en una tabla llamada
"inmuebles".
Una empresa tiene registrados sus clientes en una tabla llamada "clientes", tambin tiene
una tabla "provincias" donde registra los nombres de las provincias.
55- Obtenga la misma informacin anterior pero ordenada por nombre del cliente:
select c.nombre,c.domicilio,c.ciudad,p.nombre,c.telefono
from clientes as c
join provincias as p
on c.codigoProvincia=p.codigo
order by c.nombre;
56- Omita la referencia a las tablas en la condicin "on" para verificar que la sentencia
no se ejecuta porque el nombre del campo "codigo" es ambiguo (ambas tablas lo tienen):
select c.nombre,c.domicilio,c.ciudad,p.nombre,c.telefono
from clientes as c
join provincias as p
on codigoProvincia=codigo
Taller No. 7 Instructor: Miguel Romero Pearanda
Una empresa tiene registrados sus clientes en una tabla llamada "clientes", tambin tiene
una tabla "provincias" donde registra los nombres de las provincias.
Una empresa tiene registrados sus clientes en una tabla llamada "clientes", tambin tiene
una tabla "provincias" donde registra los nombres de las provincias.
70- Omita la referencia a las tablas en la condicin "on" para verificar que la sentencia
no se ejecuta porque el nombre del campo "codigo" es ambiguo (ambas tablas lo tienen):
select distinct codigo,p.nombre from provincias as p
left join clientes as c
on c.codigoProvincia=p.codigo
where c.codigoprovincia is not null;
Un club dicta clases de distintos deportes. En una tabla llamada "socios" guarda los
datos de sus socios y en una tabla denominada "inscriptos" almacena la informacin
necesaria para las inscripciones de los socios a los distintos deportes.
75- Muestre los nombres de los socios que no se han inscripto nunca en un deporte:
select s.nombre
from socios as s
left join inscriptos as i
on s.documento=i.documento
where i.documento is null;
76- Omita la referencia a las tablas en la condicin "on" para verificar que la sentencia
no se ejecuta porque el nombre del campo "documento" es ambiguo (ambas tablas lo tienen):
select s.nombre
from socios as s
left join inscriptos as i
on documento=documento;
Un club de barrio realiza una rifa anual y guarda los datos de las rifas en dos tablas,
una denominada "premios" y otra llamada "numerosrifa".
80- Muestre todos los nmeros de rifas vendidos ("numerosrifas") y realice un "left join"
mostrando la posicin y el premio:
select nr.numero,p.posicion,p.premio
from numerosrifa as nr
left join premios as p
on p.numeroganador=nr.numero;
note que la posicin "5" no aparece en la lista porque el nmero ganador de esa posicin
no fue vendido, no se encuentra en la tabla "premios". Y note que los nmeros vendidos
que no ganaron tiene la fila seteada a "null".
81- Muestre los mismos datos anteriores pero teniendo en cuenta los nmeros ganadores
solamente:
select nr.numero,p.posicion,p.premio
from numerosrifa as nr
left join premios as p
on p.numeroganador=nr.numero
where p.numeroganador is not null;
82- Realice un "left join" pero en esta ocasin busque los nmeros ganadores de la tabla
"premios" en la tabla "numerosrifa":
select nr.numero,p.posicion,p.premio
from premios as p
left join numerosrifa as nr
on p.numeroganador=nr.numero;
83- Realice el mismo "join" anterior pero sin considerar los valores de "premios" que no
encuentren coincidencia en "numerosrifa".
select nr.numero,p.posicion,p.premio
from premios as p
left join numerosrifa as nr
on p.numeroganador=nr.numero
where nr.numero is not null;
Un club dicta clases de distintos deportes. En una tabla llamada "socios" guarda los
datos de sus
socios y en una tabla denominada "inscriptos" almacena la informacin necesaria para las
inscripciones de los socios a los distintos deportes.
89- Ingrese una inscripcin de alguien que no sea socio (documento que no se encuentre en
la tabla "socios"):
insert into inscriptos values ('26333444','basquet','2006','n');
90- Realice un "right join" desde la tabla "socios" a "inscriptos" buscando coincidencia
de documento:
select nombre,i.documento,deporte,i.ao,i.matricula
from socios as s
right join inscriptos as i
on s.documento=i.documento;
94- La empresa quiere que todos sus empleados realicen todas las tareas. Realice una
"cross join":
select nombre,t.domicilio,descripcion
from guardias
cross join tareas as t;
Devuelve el producto cartesiano de ambas tablas, combina todos los registros de una tabla
con todos
los registros de la otra.
95- Obtenga la misma salida realizando un simple "join" sin parte "on":
select nombre,t.domicilio,descripcion
from guardias
join tareas as t;
Taller No. 7 Instructor: Miguel Romero Pearanda
Varios clubes de barrio se organizaron para realizar campeonatos entre ellos. La tabla
llamada "equipos" guarda la informacin de los distintos equipos que jugarn.
99- Cada equipo jugar con todos los dems 2 veces, una vez en cada sede. Realice un
"cross join"
para combinar los equipos teniendo en cuenta que un equipo no juega consigo mismo:
select e1.nombre,e2.nombre,e1.barrio as 'sede'
from equipos as e1
cross join equipos as e2
where e1.nombre<>e2.nombre;
Una agencia matrimonial almacena la informacin de sus clientes en una tabla llamada
"clientes".
104- La agencia necesita la combinacin de todas las personas de sexo femenino con las de
sexo masculino. Use un "join" sin parte "on" y establezca como condicin que las personas
de la primera tabla sean de sexo femenino y las de la segunda tabla de sexo masculino:
Taller No. 7 Instructor: Miguel Romero Pearanda
select c1.nombre,c1.edad,c1.sexo, c2.nombre,c2.edad,c2.sexo
from clientes as c1
join clientes as c2
where c1.sexo='f' and c2.sexo='m';
106- Se pide, adems, que las edades de las posibles parejas no tengan una diferencia
superior a 10 aos:
select c1.nombre,c1.edad,c1.sexo, c2.nombre,c2.edad,c2.sexo
from clientes as c1
cross join clientes as c2
where c1.sexo='f' and c2.sexo='m' and
c2.edad - c1.edad between -10 and 10;
Un club dicta clases de distintos deportes. En una tabla llamada "socios" guarda los
datos de sus socios y en una tabla denominada "inscriptos" almacena la informacin
necesaria para las inscripciones de los socios a los distintos deportes.
Note que el socio que no est inscripto en ningn deporte tiene la fila seteada a "null".
113- Realice un "natural left join" para obtener la misma salida anterior:
select nombre,i.*
from socios as s
natural left join inscriptos as i;
114- Realice un "natural right join" para obtener la misma salida anterior:
select nombre,i.*
from inscriptos as i
natural right join socios as s;
Una empresa tiene registrados sus clientes en una tabla llamada "clientes", tambin tiene
una tabla "provincias" donde registra los nombres de las provincias de las cuales son
oriundos los clientes.
118- Agrupe por nombre de provincia y cuente la cantidad de clientes por provincia usando
un "join":
select p.nombre,
count(c.codigoprovincia) as 'cant. clientes'
from provincias as p
join clientes as c
on p.codigo=c.codigoprovincia
group by p.nombre;
slo aparecen las provincias en las cuales tenemos clientes.
119- Agrupe por nombre de provincia y cuente la cantidad de clientes por provincia usando
un "left join":
select p.nombre,
count(c.codigoprovincia) as 'cant. clientes'
from provincias as p
left join clientes as c
on p.codigo=c.codigoprovincia
group by p.nombre;
Muestra todas las provincias.
Taller No. 7 Instructor: Miguel Romero Pearanda
120- Agrupe por nombre de provincia y muestre la cantidad de clientes por provincia
usando un "join" de las provincias en las cuales tenemos 2 o ms clientes:
select p.nombre,
count(c.codigoprovincia) as 'cant. clientes'
from provincias as p
join clientes as c
on p.codigo=c.codigoprovincia
group by p.nombre
having count(c.codigoprovincia)>=2;
Un comercio que tiene un stand en una feria registra en una tabla llamada "visitantes"
algunos datos de las personas que visitan o compran en su stand para luego enviarle
publicidad de sus productos.
125- Muestre la cantidad de visitantes que hicieron alguna compra, agrupados por nombre
de la ciudad:
select c.nombre,count(v.codigociudad)
from ciudades as c
join visitantes as v
on c.codigo=v.codigociudad
where v.montocompra>0
group by c.nombre;
126- Muestre la suma de las compras y el promedio de las mismas, agrupados por ciudad y
sexo:
select c.nombre,sexo,sum(montocompra) as 'total',
avg(montocompra) as 'promedio'
from ciudades as c
join visitantes as v
on c.codigo=v.codigociudad
group by c.nombre,sexo;
Una inmobiliaria que alquila departamentos guarda la informacin de los mismos en una
tabla llamada "departamentos" y "barrios".
131- Muestre la cantidad de departamentos por edificio con el nombre del barrio:
select edificio,nombre,count(*)
from departamentos as d
join barrios as b
on d.codigobarrio=b.codigo
group by edificio;
132- Muestre el promedio de los precios de los departamentos agrupados por barrio:
select nombre,avg(precio)
from departamentos as d
join barrios as b
on d.codigobarrio=b.codigo
group by nombre;
133- Muestre el promedio de los precios de los departamentos agrupados por barrio
teniendo en cuenta todos los barrios, incluso aquellos en los cuales no hay departamentos
disponibles:
select nombre,avg(precio)
from barrios as b
left join departamentos as d
on d.codigobarrio=b.codigo
group by nombre;
Un video club que alquila pelculas en video guarda informacin de sus pelculas en
alquiler y los alquileres en las tabla "peliculas" y "alquileres" respectivamente.
137- Muestre toda la informacin de los "alquileres" (nombre de la pelcula, nombre del
socio, fecha de prstamo y de devolucin):
select titulo,socio,fechaprestamo,fechadevolucion from alquileres as a
join peliculas as p
on a.codigopelicula=p.codigo
Taller No. 7 Instructor: Miguel Romero Pearanda
141- Muestre la cantidad de pelculas alquiladas por mes por cada socio ordenado por mes:
select socio,
monthname(a.fechaprestamo) as mes,
count(a.codigopelicula)
from alquileres
group by socio, mes
order by mes;
Un video club que alquila pelculas en video guarda informacin de sus pelculas en
alquiler, sus socios y los alquileres en 3 tablas llamadas "peliculas", "socios" y
"alquileres" respectivamente.
145- Muestre toda la informacin de los "alquileres" (nombre de la pelcula, nombre del
socio, fecha de prstamo y de devolucin):
select titulo,nombre,fechaprestamo,fechadevolucion from alquileres as a
join peliculas as p
on a.codigopelicula=p.codigo
join socios as s
on s.codigo=a.codigosocio;
149- Muestre la cantidad de pelculas alquiladas por mes por cada socio ordenado por mes:
select s.nombre,
monthname(a.fechaprestamo) as mes,
count(a.codigopelicula)
from socios as s
join alquileres as a
on s.codigo=a.codigosocio
group by s.nombre, mes
order by mes;
153- Intente ingresar un registro con clave primaria repetida (legajo "3567"):
insert into alumnos values('3567','Marcos Pereyra','30000333','Guemes 134');
aparece un mensaje de error.
165- Agregue el campo "director" para almacenar el nombre del director, de tipo
varchar(20):
alter table peliculas
add director varchar(20);
Un comercio que vende por mayor artculos de librera y papelera tiene una tabla
llamada "articulos".
171- El comercio, que hasta ahora ha vendido sus artculos por mayor, comenzar la venta
por menor. Necesita alterar la tabla agregando un campo para almacenar el precio por
menor para cada artculo. Agrege un campo llamado "preciopormenor":
alter table articulos
add preciopormenor decimal(4,2) unsigned;
173- Actualice el campo "preciopormenor" de todos los registros, dndole el valor del
campo "precio"
incrementado en un 10%:
update articulos set preciopormenor=precio+(precio*0.10);
187- Modifique el campo "nombre" para poder almacenar una longitud de 40 caracteres y que
no permita
valores nulos:
alter table peliculas
modify nombre varchar(40) not null;
Un comercio que vende por mayor artculos de librera y papelera tiene una tabla
llamada "articulos".
193- El comercio, que hasta ahora ha vendido sus artculos por mayor comenzar la venta
por menor. Necesita alterar la tabla modificando el nombre del campo "precio" por
"preciopormayor" adems desea redefinirlo como no nulo:
alter table articulos
change precio preciopormayor decimal(4,2) unsigned not null;
194- Tambin necesita alterar la tabla agregando un campo para almacenar el precio por
menor para cada artculo. Agrege un campo llamado "preciopormenor" que no permita valores
nulos:
alter table articulos
add preciopormenor decimal(4,2) unsigned not null;
196- Actualice el campo "preciopormenor" de todos los registros, dndole el valor del
campo "precio" incrementado en un 10%:
update articulos set preciopormenor=precio+(precio*0.10);
200- Cambie el nombre del campo "actor" por "protagonista" y modifquelo para que permita
valores nulos:
alter table peliculas
change actor protagonista varchar(20);
201- Cambie el campo "nombre" por "titulo" sin alterar los otros atributos:
alter table peliculas
change nombre titulo varchar(40) not null;