Imprimir 4
Imprimir 4
use facturacio;
-- ---------------------------------------------------
-- Exercici 1
-- ---------------------------------------------------
ALTER TABLE pro ADD COLUMN subministrador int;
ALTER TABLE pro ADD FOREIGN KEY (subministrador) REFERENCES pro(pro) ON DELETE
CASCADE ON UPDATE CASCADE;
UPDATE pro
SET subministrador = 9
WHERE pro = 10;
UPDATE pro
SET subministrador = 6
WHERE pro = 7 OR pro = 8;
UPDATE pro
SET subministrador = 1
WHERE pro = 2 or pro = 3 or pro = 4;
-- ---------------------------------------------------
-- Exercici 2
-- ---------------------------------------------------
SELECT *
FROM families
WHERE des LIKE "%PC%"
ORDER BY des DESC;
-- -------------------
-- ---------------------------------------------------
-- Exercici 3
-- ---------------------------------------------------
/*SELECT MAX(preu) * 1.12 AS "El més car amb IVA",
MIN(preu) * 1.12 AS "El més barat amb IVA",
MAX(preu) * 1.12 - MIN(preu) * 1.12 AS "Diferència amb IVA"
FROM articles;*/
SELECT *
FROM pro, poblacions
WHERE pro.pob = poblacions.pob;
-- He fet açò per a poder aplicar el left join. He borrat una població d'un
proveïdor. I després amb JOIN unisc les taules però amb LEFT li dic que també em
mostre aquells proveidors sense poble.
/*
UPDATE pro
SET pob = null
WHERE pro = 1;
*/
-- ---------------------------------------------------
-- Exercici 4
-- ---------------------------------------------------
SELECT COUNT(pro) AS "Numero de proveidors"
FROM pro
WHERE pob is null;
-- ---------------------------------------------------
-- Exercici 5
-- ---------------------------------------------------
SELECT art, preu, "C" AS "Tipus" FROM proveir
UNION
SELECT art, preu, "V" AS "Tipus" FROM articles
ORDER BY art, Tipus DESC, preu;
-- SELECT art, preu, "Compra" AS Tipus FROM proveir UNION SELECT art, preu, "Venda"
AS Tipus FROM articles ORDER BY art, Tipus desc, preu;
-- ---------------------------------------------------
-- Exercici 6
-- ---------------------------------------------------
/*SELECT articles.art,
max(proveir.preu) as "El més car",
min(proveir.preu) as "El més barat",
avg(proveir.preu) as "Preu de cost mitjà"
from articles join proveir on articles.art = proveir.art
group by articles.art
having count(proveir.pro) > 2;*/
-- ---------------------------------------------------
-- Exercici 7 - Mostra el codi de les poblacions on només hi ha un únic proveïdor.
-- ---------------------------------------------------
SELECT poblacions.pob AS "codi"
FROM poblacions JOIN pro ON pro.pob = poblacions.pob
GROUP BY poblacions.pob
HAVING count(*) = 1;
-- ---
-- Exercici 8 - Obteniu el nom de cada proveïdor amb el nom de la seua població.
-- ---
select pro.nom, poblacions.nom from pro join poblacions on poblacions.pob =
pro.pob;
SELECT pro.nom, poblacions.nom FROM pro LEFT JOIN poblacions ON poblacions.pob =
pro.pob;
-- ---
-- Exercici 9 - Per cada proveïdor mostra el seu nom i la descripció dels articles
que subministra.
-- És a dir: eixiran 2 columnes: el nom del proveïdor i descripció de l’article.
-- Nota: Ho farem amb un tipus de JOIN perquè volem que també apareguen els
proveïdors
-- que no ens subministren cap article.
-- ---
-- --
-- Exercici 10 - Mostra el codi i descripció d'aquelles famílies que tenen algun
article subministrat per algun
-- proveïdor de Tavernes (assumim que és 46403).
-- --
-- --
-- Exercici 11 - Mostra parelles de proveïdors que siguen del mateix poble.
-- Caldrà mostrar el codi i el nom dels dos proveïdors i el codi del poble.
-- No han d’eixir parelles formades per un mateix proveïdor.
-- Per exemple, no deuria d’eixir la parella 3 i 3.
-- --
SELECT pro1.pro as "Codi(A)",pro1.nom as "Nom(A)",pro2.pro as "Codi(B)",pro2.nom as
"Nom(B)",pro1.pob as "Poblacio"
FROM pro as pro1
JOIN pro as pro2 ON pro1.pob=pro2.pob AND pro1.pro < pro2.pro;
--
-- Exercici 12 - Per a cada proveïdor mostra el seu nom i el nom del proveïdor que
el subministra.
--
select pro1.nom as "proveidor", pro2.nom as "subministrador"
from pro as pro1
join pro as pro2 on pro1.subministrador = pro2.pro;
--
-- Exercici 13 - Obteniu el codi i descripció de cada família,
-- així com els preus de venda mínim, màxim i mig dels articles d'eixa família.
--
select families.fam, families.des, min(articles.preu), max(articles.preu),
avg(articles.preu)
from families
join articles on families.fam = articles.fam
group by families.fam;