0% found this document useful (0 votes)
20 views

Imprimir 4

The document contains SQL statements to create a database called "facturacio" and several related tables: families, poblacions, articles, pro, and proveir. It then inserts sample data into the tables, including 10 families, 10 towns, 10 suppliers, and 10 articles with prices from each supplier. It also includes some queries on the data, such as finding families containing "PC", joining the pro and poblacions tables, and calculating the price range for articles.

Uploaded by

a
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views

Imprimir 4

The document contains SQL statements to create a database called "facturacio" and several related tables: families, poblacions, articles, pro, and proveir. It then inserts sample data into the tables, including 10 families, 10 towns, 10 suppliers, and 10 articles with prices from each supplier. It also includes some queries on the data, such as finding families containing "PC", joining the pro and poblacions tables, and calculating the price range for articles.

Uploaded by

a
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

drop database if exists facturacio;

create database facturacio;

use facturacio;

create table families(


fam varchar(20),
des varchar(50),
primary key(fam)) engine=innodb;

create table poblacions(


pob int,
nom varchar(20),
primary key(pob)) engine=innodb;

create table articles(


art varchar(20),
des varchar(50),
preu float(10,2),
fam varchar(20),
primary key(art),
foreign key(fam) references families(fam)) engine=innodb;

create table pro(


pro int,
dni varchar(9),
nom varchar(20),
pob int,
primary key(pro),
foreign key(pob) references poblacions(pob)) engine=innodb;

create table proveir(


art varchar(20),
pro int,
preu float(10,2),
primary key(art,pro),
foreign key(art) references articles(art),
foreign key(pro) references pro(pro)) engine=innodb;

insert into poblacions values(46401, "Poble numero 1");


insert into poblacions values(46402, "Poble numero 2");
insert into poblacions values(46403, "Poble numero 3");
insert into poblacions values(46404, "Poble numero 4");
insert into poblacions values(46405, "Poble numero 5");
insert into poblacions values(46406, "Poble numero 6");
insert into poblacions values(46407, "Poble numero 7");
insert into poblacions values(46408, "Poble numero 8");
insert into poblacions values(46409, "Poble numero 9");
insert into poblacions values(46410, "Poble numero 10");
insert into families values("F1", "Familia numero 1");
insert into families values("F2", "Familia numero 2");
insert into families values("F3", "Familia numero 3");
insert into families values("F4", "Familia numero 4");
insert into families values("F5", "Familia numero 5");
insert into families values("F6", "Familia numero 6");
insert into families values("F7", "Familia numero 7");
insert into families values("F8", "Familia numero 8");
insert into families values("F9", "Familia numero 9");
insert into families values("F10", "Familia numero 10");

insert into pro values(1, "851000001", "PROV1, S.A.", 46408);


insert into pro values(2, "851000002", "PROV2, S.A.", 46401);
insert into pro values(3, "851000003", "PROV3, S.A.", 46402);
insert into pro values(4, "851000004", "PROV4, S.A.", 46410);
insert into pro values(5, "851000005", "PROV5, S.A.", 46401);
insert into pro values(6, "851000006", "PROV6, S.A.", 46405);
insert into pro values(7, "851000007", "PROV7, S.A.", 46403);
insert into pro values(8, "851000008", "PROV8, S.A.", 46409);
insert into pro values(9, "851000009", "PROV9, S.A.", 46406);
insert into pro values(10, "851000010", "PROV10, S.A.", 46403);
insert into articles values("A1", "Article numero 1", 48.76, "F5");
insert into proveir values("A1", 1, 29.25);
insert into proveir values("A1", 2, 14.62);
insert into proveir values("A1", 3, 34.13);
insert into proveir values("A1", 4, 24.38);
insert into proveir values("A1", 5, 24.38);
insert into proveir values("A1", 6, 19.5);
insert into proveir values("A1", 7, 39.0);
insert into proveir values("A1", 8, 24.38);
insert into proveir values("A1", 9, 19.5);
insert into proveir values("A1", 10, 14.62);
insert into articles values("A2", "Article numero 2", 20.37, "F5");
insert into proveir values("A2", 1, 12.22);
insert into proveir values("A2", 2, 10.18);
insert into proveir values("A2", 3, 12.22);
insert into proveir values("A2", 4, 10.18);
insert into proveir values("A2", 5, 10.18);
insert into proveir values("A2", 6, 6.11);
insert into proveir values("A2", 7, 8.14);
insert into proveir values("A2", 8, 10.18);
insert into proveir values("A2", 9, 12.22);
insert into proveir values("A2", 10, 14.25);
insert into articles values("A3", "Article numero 3", 29.28, "F8");
insert into proveir values("A3", 1, 8.78);
insert into proveir values("A3", 2, 14.64);
insert into proveir values("A3", 3, 14.64);
insert into proveir values("A3", 4, 14.64);
insert into proveir values("A3", 5, 23.42);
insert into proveir values("A3", 6, 17.56);
insert into proveir values("A3", 7, 14.64);
insert into proveir values("A3", 8, 17.56);
insert into proveir values("A3", 9, 14.64);
insert into proveir values("A3", 10, 8.78);
insert into articles values("A4", "Article numero 4", 75.38, "F2");
insert into proveir values("A4", 1, 37.68);
insert into proveir values("A4", 2, 37.68);
insert into proveir values("A4", 3, 52.76);
insert into proveir values("A4", 4, 22.61);
insert into proveir values("A4", 5, 60.3);
insert into proveir values("A4", 6, 45.22);
insert into proveir values("A4", 7, 37.68);
insert into proveir values("A4", 8, 45.22);
insert into proveir values("A4", 9, 22.61);
insert into proveir values("A4", 10, 45.22);
insert into articles values("A5", "Article numero 5", 49.64, "F10");
insert into proveir values("A5", 1, 39.71);
insert into proveir values("A5", 2, 34.74);
insert into proveir values("A5", 3, 19.85);
insert into proveir values("A5", 4, 29.78);
insert into proveir values("A5", 5, 14.89);
insert into proveir values("A5", 6, 19.85);
insert into proveir values("A5", 7, 34.74);
insert into proveir values("A5", 8, 39.71);
insert into proveir values("A5", 9, 39.71);
insert into proveir values("A5", 10, 34.74);
insert into articles values("A6", "Article numero 6", 73.71, "F10");
insert into proveir values("A6", 1, 58.96);
insert into proveir values("A6", 2, 51.59);
insert into proveir values("A6", 3, 22.11);
insert into proveir values("A6", 4, 44.22);
insert into proveir values("A6", 5, 58.96);
insert into proveir values("A6", 6, 58.96);
insert into proveir values("A6", 7, 29.48);
insert into proveir values("A6", 8, 22.11);
insert into proveir values("A6", 9, 29.48);
insert into proveir values("A6", 10, 51.59);
insert into articles values("A7", "Article numero 7", 54.5, "F10");
insert into proveir values("A7", 1, 16.35);
insert into proveir values("A7", 2, 32.7);
insert into proveir values("A7", 3, 27.25);
insert into proveir values("A7", 4, 16.35);
insert into proveir values("A7", 5, 16.35);
insert into proveir values("A7", 6, 43.6);
insert into proveir values("A7", 7, 27.25);
insert into proveir values("A7", 8, 21.8);
insert into proveir values("A7", 9, 16.35);
insert into proveir values("A7", 10, 32.7);
insert into articles values("A8", "Article numero 8", 57.41, "F7");
insert into proveir values("A8", 1, 40.18);
insert into proveir values("A8", 2, 34.44);
insert into proveir values("A8", 3, 34.44);
insert into proveir values("A8", 4, 28.7);
insert into proveir values("A8", 5, 28.7);
insert into proveir values("A8", 6, 28.7);
insert into proveir values("A8", 7, 34.44);
insert into proveir values("A8", 8, 28.7);
insert into proveir values("A8", 9, 40.18);
insert into proveir values("A8", 10, 45.92);
insert into articles values("A9", "Article numero 9", 69.03, "F10");
insert into proveir values("A9", 1, 20.7);
insert into proveir values("A9", 2, 55.22);
insert into proveir values("A9", 3, 27.61);
insert into proveir values("A9", 4, 48.32);
insert into proveir values("A9", 5, 48.32);
insert into proveir values("A9", 6, 34.51);
insert into proveir values("A9", 7, 27.61);
insert into proveir values("A9", 8, 55.22);
insert into proveir values("A9", 9, 41.41);
insert into proveir values("A9", 10, 20.7);
insert into articles values("A10", "Article numero 10", 33.73, "F10");
insert into proveir values("A10", 1, 10.11);
insert into proveir values("A10", 2, 26.98);
insert into proveir values("A10", 3, 16.86);
insert into proveir values("A10", 4, 10.11);
insert into proveir values("A10", 5, 13.49);
insert into proveir values("A10", 6, 10.11);
insert into proveir values("A10", 7, 20.23);
insert into proveir values("A10", 8, 13.49);
insert into proveir values("A10", 9, 23.61);
insert into proveir values("A10", 10, 26.98);

-- ---------------------------------------------------
-- 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;

SELECT * FROM pro;

-- ---------------------------------------------------
-- 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 MAX(preu) - MIN(preu) as "Diferència"


FROM articles;

SELECT *
FROM pro, poblacions
WHERE pro.pob = poblacions.pob;

SELECT count(*) AS "Nº proveïdors"


FROM pro
WHERE pob = NULL;
-- SELECT * FROM pro, poblacions WHERE pro.pob = poblacions.pob ORDER BY
poblacions.nom;
-- SELECT * FROM pro JOIN poblacions ON 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;
*/

-- SELECT * FROM pro LEFT JOIN poblacions ON pro.pob = poblacions.pob;

-- ---------------------------------------------------
-- 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;*/

SELECT art, MIN(preu) AS "Mínim", MAX(preu) AS "Màxim", AVG(preu) AS "Mitjana"


FROM proveir
GROUP BY art
HAVING count(*) > 2;

-- SELECT * FROM proveir;


-- SELECT * FROM proveir ORDER BY pro;
-- SELECT * FROM proveir GROUP BY pro;
-- SELECT pro FROM proveir GROUP BY pro;
SELECT pro, MIN(preu) FROM proveir GROUP BY pro ORDER BY MIN(preu);
-- No pot anar un WHERE després d'un GROUP BY, haurem de canviar-lo per HAVING
-- SELECT pro, MIN(preu) FROM proveir GROUP BY pro WHERE pro = 10;
SELECT pro, MIN(preu) as preu_minim FROM proveir GROUP BY pro HAVING preu_minim <
10 ORDER BY preu_minim;

SELECT art as idArticles,


MIN(preu) as pMinim,
MAX(preu) as pMaxim,
AVG(preu) as pMitja,
COUNT(pro) AS qProveidors
FROM proveir
GROUP BY art
HAVING COUNT(pro) > 9;

-- ---------------------------------------------------
-- 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;

-- Hem de mostrar aquell poble que sols té un únic proveidor 09,06,05,02


SELECT * FROM pro;
SELECT pob FROM pro GROUP BY pob HAVING COUNT(pro) = 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.
-- ---

select pro.nom as "Nom proveïdor", articles.des as "Descripció de l'article"


from pro left join proveir on proveir.pro = pro.pro
left join articles on proveir.art = articles.art;

-- --
-- 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).
-- --

select distinct families.fam, families.des


from families
join articles on families.fam = articles.fam
join proveir on articles.art = proveir.art
join pro on proveir.pro = pro.pro
where pro.pob = "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;

You might also like