jueves, 17 de marzo de 2011

Soluciones T05



 T05.001- Número de pedido e identificador, apellidos y nombre del usuario que realiza el pedido (usando join).
select numpedido,usuario,apellidos,nombre
from pedido join usuario on (usuario=email)
order by apellidos,nombre;

T05.002- Número de pedido e identificador, apellidos y nombre del usuario que realiza el pedido, y nombre de la localidad del usuario (usando join).
select numpedido,usuario,apellidos,u.nombre,l.pueblo
from pedido
join usuario u on (usuario=email)
join localidad l on (l.codm=u.pueblo and l.provincia=u.provincia)
order by apellidos,u.nombre;

T05.003- Número de pedido e identificador, apellidos y nombre del usuario que realiza el pedido, nombre de la localidad y nombre de la provincia del usuario (usando join).
select numpedido, usuario, u1.apellidos, u1.nombre, p1.nombre
from usuario u1 join pedido on (u1.email= usuario)
join localidad l1 on (u1.pueblo= l1.codm and u1.provincia= l1.provincia)
join provincia p1 on (u1.provincia= codp)

T05.004- Nombre de provincia y nombre de localidad ordenados por provincia y localidad (usando join) de las provincias de Aragón y de localidades cuyo nombre comience por "B".
select p1.nombre, l1.pueblo
from provincia p1
join localidad l1 on (p1.codp= l1.provincia)
where (p1.nombre like 'Teruel' or p1.nombre like 'Zaragoza' or p1.nombre like 'Huesca') and l1.pueblo like 'B%'
order by p1.codp, l1.codm

T05.005- Apellidos y nombre de los usuarios y, si tienen, pedido que han realizado.
select apellidos, nombre, numpedido
from usuario left join pedido on usuario=email;

T05.006- Código y nombre de los artículos, si además es una cámara, mostrar también la resolución y el sensor.
select a.cod, nombre, resolucion, sensor
from articulo a
left join camara c on (a.cod = c.cod);

T05.007- Código, nombre y precio de venta al público de los artículos, si además se trata de un objetivo mostrar todos sus datos.
select a.cod, nombre, pvp, o.*
from articulo a left join objetivo o 
on o.cod = a.cod;

T05.008- Muestra las cestas del año 2010 junto con el nombre del artículo al que referencia y su precio de venta al público.
select c.*, nombre, pvp
from cesta c join articulo a on c.articulo=a.cod
where year(fecha)=2010;

T05.009- Muestra toda la información de los artículos. Si alguno aparece en una cesta del año 2010 muestra esta información.
select a.*, c.*
from articulo a
left join cesta c on (articulo=cod and year(fecha) = 2010);

T05.010- Disponibilidad en el stock de cada cámara junto con la resolución de todas las cámaras.
select s.*, resolucion
from stock s
right join camara on (cod=articulo);

T05.011- Código y nombre de los artículas que no tienen marca.
select cod, nombre from articulo where marca is null

T05.012- Código, nombre y marca de todos los artículos, tengan o no marca.
select cod, nombre, marca from articulo

T05.013- Código, nombre, marca y empresa responsable de la misma de todos los artículos. Si algún artículo no tiene marca debe aparecer en el listado con esta información vacía.
select cod, nombre, a.marca, empresa
from articulo a left join marca m 
on a.marca = m.marca;

T05.014- Información de todos los usuarios de la comunidad valenciana cuyo nombre empiece por 'P' incluyendo la dirección de envío en caso de que la tenga.
select u.*, d.*
from usuario u
left join direnvio d on (d.email=u.email)
where u.provincia in ('46','03','12')
and u.nombre like 'P%';

05.015- Código y nombre de los artículos, y código de pack en el caso de que pertenezca a alguno.
select a.cod, nombre, p.pack
from articulo a left join ptienea p on a.cod = p.articulo;

T05.016- Usuarios y pedidos que han realizado.
select u.email, u.nombre, u.apellidos, u.dni, p.*
from usuario u
right join pedido p on (u.email= p.usuario)

T05.017- Información de aquellos usuarios de la comunidad valenciana (códigos 03, 12 y 46) cuyo nombre empiece por 'P' que tienen dirección de envío pero mostrando, a la derecha, todas las direcciones de envío de la base de datos.
select u.*, d.*
from usuario u right join direnvio d
on u.email = d.email and u.provincia 
in (03, 12, 46) and u.nombre LIKE 'P%';


Soluciones T04

T04.001- Toda la información de los pedidos anteriores a octubre de 2010.
select * from pedido where fecha < '2010-10-01';

T04.002- Toda la información de los pedidos posteriores a agosto de 2010.
select * from pedido where fecha > '2010-08-31';

T04.003- Toda la información de los pedidos realizados entre agosto y octubre de 2010.
select * from pedido where fecha > '2010-07-31' and fecha < '2010-11-01';

T04.004- Toda la información de los pedidos realizados el 3 de marzo o el 27 de octubre de 2010.
select * from pedido where fecha = '2010-03-03' or fecha = '2010-10-27';

T04.005- Toda la información de los pedidos realizados el 3 de marzo o el 27 de octubre de 2010, y que han sido realizados por usuarios del dominio "cazurren"
select * from pedido
where (fecha = '2010-03-03' or fecha = '2010-10-27')
and usuario like '%@cazurren.%';

T04.006- ¿En qué día y hora vivimos?
select now();

T04.007- 21 de febrero de 2011 en formato dd/mm/aaaa
select date_format('2011-02-21','%d/%m/%Y') fecha;

T04.008- 31 de febrero de 2011 en formato dd/mm/aaaa
select date_format('2011-02-31','%d/%m/%Y') fecha;

T04.009- Pedidos realizados el 13.9.2010 (este formato, obligatorio en la comparación).
select * from pedido
where fecha = str_to_date('13.9.2010','%d.%m.%Y');

T04.010- Numero y fecha de los pedidos realizados el 13.9.2010 (este formato, obligatorio tanto en la comparación como en la salida).
select numpedido, date_format(fecha,'%d.%m.%Y') fecha
from pedido
where fecha = str_to_date('13.9.2010','%d.%m.%Y');

T04.011- Numero, fecha, y cliente de los pedidos (formato dd.mm.aa) ordenado descendentemente por fecha y ascendentemente por cliente.
select numPedido,date_format(fecha,'%d.%m.%Y') lafecha,usuario
from pedido
order by fecha desc,usuario;

T04.012- Códigos de articulos solicitados en 2010, eliminando duplicados y ordenado ascendentemente.
select distinct li.articulo
from linped li,pedido pe
where li.numPedido=pe.numPedido AND month(fecha)=3 AND year(fecha)=2010
order by articulo;

T04.013- Códigos de articulos solicitados en pedidos de marzo de 2010, eliminando duplicados y ordenado ascendentemente.
select distinct l.articulo
from pedido p, linped l
where p.fecha between '2010-03-01' and '2010-03-31' and p.numPedido=l.numPedido
order by articulo asc;

T04.014- Códigos de articulos solicitados en pedidos de septiembre de 2010, y semana del año (la semana comienza en lunes) y año del pedido, ordenado por semana.
select articulo,week(fecha) semana,year(fecha) año
from linped l,pedido p
where l.numpedido=p.numpedido and fecha between '2010/09/01' and '2010/09/31'
order by semana;

T04.015- Nombre, apellidos y edad (aproximada) de los usuarios del dominio "dlsi.ua.es", ordenado descendentemente por edad.
select nombre,apellidos,(year(now())-year(nacido)) edad
from usuario
where email LIKE '%@dlsi.ua.es'
order by edad desc;

T04.016- Email y cantidad de días que han pasado desde los pedidos realizados por cada usuario hasta la fecha de cada artículo que ahora mismo hay en su cesta. Eliminad duplicados.
select distinct p.usuario, DATEDIFF(p.fecha,c.fecha)
 from pedido p , cesta c
where (p.usuario= c.usuario);

T04.017- Información sobre los usuarios menores de 25 años.
select * from usuario
where year(now())-year(nacido)<25;

T04.018- Número de pedido, usuario y fecha (dd/mm/aaaa) al que se le solicitó para los pedidos que se realizaron durante la semana del 7 de noviembre de 2010.
select numpedido, usuario, date_format(fecha, '%d/%m/%Y') fecha
from pedido
where weekofyear(fecha)=weekofyear('2010-11-07');

Soluciones T03

T03.001- Código y nombre de los articulos con un precio entre 400 y 500 euros.
select cod,nombre from articulo where pvp between 400 and 500;
Solución alternativa: 
select cod,nombre from articulo where pvp >= 400 and pvp <= 500;

T03.002- Código y nombre de los articulos con precio 415, 129, 1259 o 3995.
select cod,nombre from articulo
where pvp in (415, 129, 1259, 3995);
Solución alternativa: 
select cod,nombre from articulo
where pvp = 415 or pvp = 129 or pvp = 1259 or pvp = 3995;

T03.003- Código y nombre de las provincias que no son Huelva, Sevilla, Asturias ni Barcelona.
select codp,nombre from provincia
where nombre not in ('huelva', 'sevilla', 'asturias', 'barcelona');
Solución alternativa: 
select codp,nombre from provincia
where nombre != 'huelva' and nombre != 'sevilla' and nombre != 'asturias'and nombre != 'barcelona';

T03.004- Código de la provincia Alicante.
select codp from provincia
where nombre like 'Alicante%';

T03.005- Obtener el código, nombre y pvp de los articulos cuya marca comience por S.
select cod, nombre, pvp from articulo where marca like 'S%'

T03.006- Información sobre los usuarios cuyo email es de la eps.
select * from usuario where email like '%@eps.%'

T03.007- Código, nombre y resolución de los televisores cuya pantalla no esté entre 22 y 42.
select a.cod, nombre, resolucion
from articulo a, tv
where a.cod=tv.cod and pantalla not between 22 and 42;

T03.008- Código y nombre de los televisores cuyo panel sea tipo LED y su precio no supere los 1000 euros.
select t.cod, nombre from tv t, articulo a where t.cod=a.cod and panel like '%LED%' and pvp<=1000;

T03.009- Email de los usuarios cuyo código postal no sea 02012, 02018 o 02032.
select email from usuario
where codpos not in ('02012','02018','02032');

T03.010- Código y nombre de los packs de los que se conoce de que articulos se componen.
select distinct cod, nombre
from  articulo, ptienea
where pack=cod;

T03.011- ¿Hay algún artículo en cesta que esté descatalogado?
select c.articulo
from cesta c, stock s
where c.articulo=s.articulo
and entrega='Descatalogado'

T03.012- Código, nombre y pvp de las cámaras de tipo compacta.
select c.cod, nombre, pvp
from camara c, articulo a
where c.cod = a.cod 
and tipo like '%compacta%';

T03.013- Código, nombre y diferencia entre pvp y precio de los articulos que hayan sido solicitados en algún pedido a un precio distinto de su precio de venta.
select cod, nombre, pvp-precio
from articulo, linped
where cod=articulo and pvp<>precio;

T03.014- Número de pedido,fecha y nombre y apellidos del usuario que solicita el pedido, para aquellos pedidos solicitados por algún usuario de apellido MARTINEZ.
select numpedido, fecha, nombre, apellidos
from pedido p, usuario u
where p.usuario = u.email
and apellidos like '%MARTINEZ%';

T03.015- Código, nombre y marca del artículo más caro.
select cod, nombre, marca, pvp
from articulo
where pvp >= all (select pvp from articulo);
Solución alternativa: 
select cod, nombre, marca, pvp
from articulo
where pvp = (select max(pvp) from articulo);

T03.016- Nombre, marca y resolucion de las cámaras que nunca se han solicitado.
select nombre, marca, resolucion
from articulo a, camara c
where a.cod=c.cod and c.cod not in (select articulo from linped);

T03.017- Código, nombre, tipo y marca de las cámaras de marca Nikon, LG o Sigma.
select c.cod, nombre, tipo, marca
from camara c, articulo a
where c.cod = a.cod and marca in ('Nikon', 'LG', 'Sigma');

T03.018- Código, nombre y pvp de la cámara más cara de entre las de tipo réflex.
select c.cod, nombre, pvp
from camara c, articulo a
where c.cod = a.cod
and tipo like '%réflex%' and pvp>= all (select pvp
from camara c, articulo a
where c.cod = a.cod and tipo like '%réflex%');

T03.019- Marcas de las que no tenemos ningún televisor.
select distinct marca 
from articulo
where cod not in (select cod from tv) and marca is not null;

T03.020- Código, nombre y disponibilidad de los artículos con menor disponibilidad de entre los que pueden estar disponibles en 24 horas.
select cod, nombre, disponible
from stock s, articulo a
where s.articulo = a.cod and entrega='24 horas' and disponible <= all (select disponible
from stock 
where entrega='24 horas');

T03.021- Nombre de los artículos cuyo nombre contenga la palabra EOS.
select nombre from articulo where nombre like '%EOS%';

T03.022- Tipo y focal de los objetivos que se monten en una cámara Canon sea cual sea el modelo.
select tipo, focaL from objetivo where montura like 'Canon%';

T03.023- Nombre de los artículos cuyo precio sea mayor de 100 pero menor o igual que 200.
select nombre from articulo where pvp>100 and pvp<=200;

T03.024- Nombre de los artículos cuyo precio sea mayor o igual que 100 pero menor o igual que 300.
select nombre from articulo where pvp between 100 and 300;

T03.025- Nombre de las cámaras cuya marca no comience por la letra S.
select nombre from articulo a, camara c where a.cod=c.cod and marca not like 'S%';;

T03.026- Dirección de correo de los usuarios cuyo dni termine en B, L o P.
select email from usuario
where dni like '%B'  or dni like '%L'  or dni like '%P';


T03.027- Código de los televisores que tengan un panel LCD o LED.
select cod from tv where panel like '%LCD%' or panel like '%LED%';

T03.028- Número de pedido y artículo con la línea de pedido de menor precio.
select numpedido, articulo
from linped
where precio = (select min(precio) from linped);

T03.029- Nombre de los televisores que tengan una pantalla mayor que el televisor de código A0686.
select nombre
from tv, articulo a
where tv.cod = a.cod and pantalla>(select pantalla
from tv
where cod='A0686');

T03.030- Líneas de pedido y número de pedido al que correspondan dichas líneas, y que incluyan más cantidad de artículos que las demás.
select linea, numpedido
from linped
where cantidad >= all (select cantidad
from linped);

T03.031- Líneas de pedido y nombre de los artículos que aparecen en esas líneas, si el precio de esas líneas no es el menor de todas las líneas conocidas.
select distinct linea, nombre
from linped l, articulo a
where l.articulo = a.cod and precio !=
(select min(precio)
from linped);

T03.032- Nombre, precio y marca de los artículos con mayor disponibilidad de stock.
select nombre, pvp, marca
from articulo a, stock s
where s.articulo = a.cod and disponible >= all (select disponible
from stock);


T03.033- Nombre, precio y marca de los artículos que no tengan la mayor disponibilidad de stock.
select nombre, pvp, marca
from articulo a, stock s
where s.articulo = a.cod and disponible !=
(select max(disponible)
from stock);


T03.034- Provincias en las que viven usuarios que hayan realizado algún pedido.
select distinct p.nombre
from provincia p, pedido, usuario u
where usuario = email and u.provincia = codp;

T03.035- Nombre de los artículos que hayan sido seleccionados en alguna cesta con fecha entre 01.11.2010 y 31.12.2010
select distinct nombre
from articulo a, cesta c
where a.cod=c.articulo
and c.fecha between '2010-11-01' and '2010-12-31';

T03.036- Nombre de los artículos que hayan sido seleccionados en alguna cesta por usuarios de las provincias de Valencia o Alicante.

select distinct a.nombre
from provincia p, usuario u, cesta c, articulo a
where usuario = email and u.provincia = codp and c.articulo = a.cod and p.nombre in ('Valencia/València', 'Alicante/Alacant');

T03.037- Número de los pedidos en los que se han incluido artículos a un precio menor que su pvp.

select distinct numPedido
from linped l, articulo a
where l.articulo = a.cod and pvp>precio;