show databases;
use world3;
-- select * from countries;
-- select * from cities;
select * from countries_languages;
-- Ejercicio 1
-- Mostrar nombre de país, área del país y nombres de todas las ciudades, para los
países "Colombia" y "Argentina"
/*select [Link], [Link], [Link]
from countries inner join cities
on [Link] = cities.country_id
where [Link] in ('Colombia','Argentina');*/
-- Ejercicio 2
-- Mostrar nombre del país y nombre de todos los idiomas no oficiales que se
hablan, para todos los países de la región de norte américa
select [Link], [Link], countries_languages.is_official
from countries inner join countries_languages
on [Link] = countries_languages.language_id
where [Link]
-- Base de Datos PIZZERIA
-- Ejercicio 1
show databases;
use my_pizzeria;
show tables;
-- Ejercicio 2
select * from tipos_id;
select * from clientes;
-- Ejercicio 3
-- Nombre de las tablas
-- c: clientes, t: tipos_id
-- Mostrar nombre, apellidos y descripción del tipo_id de todos los clientes
select [Link] ,[Link],t.tipo_id
from clientes c
join tipos_id t
on t.tipo_id = c.tipo_id;
-- Ejercicio 4
-- Mostrar id de factura, valor de factura, fecha de facturación y descripción del
tipo de pago de las facturas de 2019
-- Nombre de las tablas
-- f: facturas venta , m: medios_pago
select * from facturas_venta;
select * from medios_pago;
select [Link], [Link], [Link], [Link]
from facturas_venta f
join medios_pago m
on [Link] = f.id_medio_pago
where year([Link]) = 2019;
-- opcion 2
select [Link], [Link], [Link], [Link]
from facturas_venta f
join medios_pago m
on [Link] = f.id_medio_pago
where [Link] between '2019-01-01'and '2019-12-31';
-- Ejercicio 5
-- Mostrar nombre de producto, precio, id de factura, fecha de venta, id del
cliente, tipo de producto y id de medio de pago
-- de los productos que se hayan vendido en febrero de 2019
select [Link],[Link],[Link],[Link], f.id_cliente,[Link], f.id_medio_pago
from facturas_venta f
join pedidos pe
on [Link] = pe.id_factura
join productos p
on pe.id_producto = [Link]
where [Link] between '2019-02-01' and '2019-02-28';
-- Ejercicio 6
-- Mostrar nombre del proveedor, teléfono y nombre del insumo para los proveedores
a los que se les puede comprar cualquier insumo que en su nombre
-- tenga la palabra "queso" o "harina"
select [Link], [Link], [Link]
from proveedores pro
join insumos_proveedores ip
on [Link] = ip.id_proveedor
join insumos i
on ip.id_insumo = [Link]
where [Link] like '%QUESO%' or [Link] like '%HARINA%';
-- Ejercicio 7
-- Mostrar id y teléfono de los clientes que a su vez son proveedores
select [Link], [Link]
from clientes c
inner join proveedores pro -- Recordar que el inner join trae contenido comun entre
las 2 tablas
on [Link] = [Link];
-- Ejercicio 8
-- Mostrar cantidad de insumos que se necesitan para preparar cada producto (ej:
para preparar una lasaña de carne necesito 3 insumos).
select [Link] as nombre_producto, count(r.id_insumo) as cantidad_insumos
from productos p
inner join recetas r on [Link] = r.id_producto
inner join insumos i on r.id_insumo = [Link]
group by [Link]
order by cantidad_insumos asc;
select * from recetas;
-- Ejercicio 9
-- Mostrar, subtotalizando por nombre de producto, cuántos productos se facturaron
select [Link], count([Link]) as cantidad
from productos p
join pedidos pe
on pe.id_producto = [Link]
group by [Link];
-- Ejercicio 10
-- Mostrar cuántos productos se le facturaron a cada cliente. Indicar también
nombre y apellidos de los clientes
select * from pedidos;
select [Link], [Link], count([Link]) as total_productos_facturados
from clientes c
inner join facturas_venta f
on [Link] = f.id_cliente
group by [Link],[Link], [Link]
order by total_productos_facturados desc;
-- Revisar bien este ejercicio
-- Ejercicio 11
-- Igual que el anterior, pero mostrando sólo los clientes a quienes se les hizo
más de una factura
select * from pedidos;
select [Link], [Link], count([Link]) as total_productos_facturados
from clientes c
inner join facturas_venta f
on [Link] = f.id_cliente
group by [Link],[Link], [Link]
having count([Link]) > 1
order by total_productos_facturados desc;
-- Revisar tambien nuevamente este
-- Ejercicio 12
-- Mostrar nombres, apellidos de los cliente y el total de dinero que se les ha
facturado a cada uno
select * from facturas_venta;
select [Link], [Link], sum ([Link]) as total_facturado
from clientes c
join facturas_venta f
on [Link] = f.id_cliente
group by [Link], [Link];
-- Ejercicio 13
-- Mostrar id de los clientes a los cuales nunca se les ha realizado una factura ,
NOTA: Apoyarse en el operador "except"
select id
from clientes c
except
select f.id_cliente
from facturas_venta f;
-- NUEVOS EJERCICIOS
--
-- Mostrar el nombre de los clientes y la cantidad total de facturas que tienen
select [Link], count([Link]) as cantidad_total_facturas
from clientes c
left join facturas_venta f
on [Link] = f.id_cliente
group by [Link], [Link], [Link];
-- Listar los productos más vendidos (top 5) con la cantidad total pedida.
select [Link], COUNT(pe.id_producto) as cantidad_vendida
from pedidos pe
inner join productos p
on pe.id_producto = [Link]
group by [Link],[Link]
order by cantidad_vendida desc
fetch first 5 rows only;
-- Mostrar los clientes que nunca han realizado una factura (EXCEPT).
SELECT [Link]
FROM clientes c
EXCEPT
SELECT f.id_cliente
FROM facturas_venta f;
-- Mostrar los clientes que sí tienen facturas (INTERSECT).
SELECT [Link], [Link], [Link]
FROM clientes c
INTERSECT
SELECT f.id_cliente, [Link], [Link]
FROM facturas_venta f
inner JOIN clientes c ON [Link] = f.id_cliente
ORDER BY apellidos, nombres;
-- Mostrar el total de facturación por año.
select year(fecha), SUM(valor) as total_facturado
from facturas_venta
group by year(fecha);
SELECT
EXTRACT(YEAR FROM fecha) AS anio,
SUM(valor) AS total_facturado
FROM facturas_venta
GROUP BY EXTRACT(YEAR FROM fecha)
ORDER BY anio;
-- Mostrar los 3 clientes que más productos han comprado.
select [Link], [Link], [Link], count(pe.id_producto) as
cantidad_productos_comprado
from clientes c
inner join facturas_venta f
on [Link] = f.id_cliente
inner join pedidos pe
on [Link] = pe.id_factura
group by [Link], [Link], [Link]
order by cantidad_productos_comprado desc
FETCH FIRST 3 ROWS ONLY;
-- Mostrar las facturas con valor mayor al promedio de todas las facturas.
SELECT [Link], [Link],[Link]
FROM facturas_venta f
WHERE [Link] > (SELECT AVG(valor) FROM facturas_venta);
-- Mostrar cuántos insumos se necesitan para preparar cada producto.
select r.id_insumo, count([Link]) as cantidad_insumos, [Link]
from recetas r
inner join productos p
on r.id_producto = [Link]
group by [Link]
order by cantidad_insumos asc;
-- Insertar un nuevo cliente en la tabla clientes.
select * from clientes;
insert into clientes (id,tipo_id,nombres,apellidos)
values (10,'CC','TAYLOR','SWIFT');
-- Mostrar todos los clientes junto con las facturas (aunque no tengan facturas).
select [Link], [Link], [Link], [Link]
from clientes c
left join facturas_venta f
on [Link] = f.id_cliente
group by [Link], [Link], [Link];
-- Mostrar el promedio de valor de factura por medio de pago.
select [Link], avg([Link]) as promedio_por_medio_de_pago, [Link], [Link]
from facturas_venta f
inner join medios_pago m
on f.id_medio_pago = [Link]
group by [Link];