DELETE FROM elementy_zestawow;
DELETE FROM zestawy;
DELETE FROM czesci;
INSERT INTO czesci VALUES(1,'Obudowa A','obudowa',200,20);
INSERT INTO czesci VALUES(2,'Obudowa B','obudowa',250,10);
INSERT INTO czesci VALUES(3,'Obudowa C','obudowa',200,5);
INSERT INTO czesci VALUES(4,'Obudowa D','obudowa',500,0);
INSERT INTO czesci VALUES(5,'Obudowa nieznana','obudowa',300,100);
INSERT INTO czesci VALUES(11,'Procesor A','procesor',2000,2);
INSERT INTO czesci VALUES(12,'Procesor B','procesor',1050,1);
INSERT INTO czesci VALUES(13,'Procesor C','procesor',500,50);
INSERT INTO czesci VALUES(14,'Procesor D','procesor',500,0);
INSERT INTO czesci VALUES(15,'Procesor E','procesor',501,20);
INSERT INTO czesci VALUES(21,'Karta A','karta_gr',1000,1);
INSERT INTO czesci VALUES(22,'Karta B','karta_gr',550,1);
INSERT INTO czesci VALUES(50,'null','null',100,NULL);
INSERT INTO czesci VALUES(88,'cos z nullem','abc',1000,NULL);
INSERT INTO czesci VALUES(89,'cos z zerem', 'abc',999,0);
INSERT INTO czesci VALUES(99,'cos','cos',59999,0);
INSERT INTO zestawy VALUES(101,'Zestaw A',9999);
INSERT INTO zestawy VALUES(102,'Zestaw B',5999);
INSERT INTO zestawy VALUES(103,'Zestaw C',2999);
INSERT INTO zestawy VALUES(104,'Zestaw D',12999);
INSERT INTO zestawy VALUES(105,'Zestaw D (x2)',20999);
INSERT INTO zestawy VALUES(106,'Zestaw Unikalny',99999);
INSERT INTO zestawy VALUES(107,'Zestaw prosty',10);
INSERT INTO zestawy VALUES(108,'Zestaw B (x2)',6999);
INSERT INTO zestawy VALUES(109,'zestaw null',101);
INSERT INTO elementy_zestawow VALUES(101,1,1);
INSERT INTO elementy_zestawow VALUES(101,11,1);
INSERT INTO elementy_zestawow VALUES(101,21,1);
INSERT INTO elementy_zestawow VALUES(102,2,1);
INSERT INTO elementy_zestawow VALUES(102,12,1);
INSERT INTO elementy_zestawow VALUES(102,22,2);
INSERT INTO elementy_zestawow VALUES(103,3,1);
INSERT INTO elementy_zestawow VALUES(103,13,1);
INSERT INTO elementy_zestawow VALUES(104,4,1);
INSERT INTO elementy_zestawow VALUES(104,14,1);
INSERT INTO elementy_zestawow VALUES(105,4,2);
INSERT INTO elementy_zestawow VALUES(105,14,2);
INSERT INTO elementy_zestawow VALUES(106,1,1);
INSERT INTO elementy_zestawow VALUES(106,11,1);
INSERT INTO elementy_zestawow VALUES(106,99,1);
INSERT INTO elementy_zestawow VALUES(107,1,1);
INSERT INTO elementy_zestawow VALUES(108,2,2);
INSERT INTO elementy_zestawow VALUES(108,12,2);
INSERT INTO elementy_zestawow VALUES(108,22,3);
INSERT INTO elementy_zestawow VALUES (109,50,1);
zadanie 1
SELECT rodzaj,min(cena),max(cena) FROM czesci GROUP BY rodzaj;
RODZAJ MIN(CENA) MAX(CENA)
---------------- ---------- ----------
abc 999 1000
cos 59999 59999
karta_gr 550 1000
null 100 100
obudowa 200 500
procesor 500 2000
zadanie 2
SELECT id,nazwa FROM czesci WHERE magazyn IS NULL OR magazyn=0;
ID NAZWA
---------- ----------------
4 Obudowa D
14 Procesor D
50 null
88 cos z nullem
89 cos z zerem
99 cos
zadanie 3
SELECT z.id,z.nazwa,z.cena,
(SELECT sum(c.cena*ez.liczba)
FROM elementy_zestawow ez,czesci c
WHERE ez.zestaw=z.id AND ez.czesc=c.id) AS koszt
FROM zestawy z;
ID NAZWA CENA KOSZT
---------- ---------------- ---------- ----------
101 Zestaw A 9999 3200
102 Zestaw B 5999 2400
103 Zestaw C 2999 700
104 Zestaw D 12999 1000
105 Zestaw D (x2) 20999 2000
106 Zestaw Unikalny 99999 62199
107 Zestaw prosty 10 200
108 Zestaw B (x2) 6999 4250
109 zestaw null 101 100
zadanie 4
SELECT z.id,z.nazwa
FROM zestawy z
WHERE NOT EXISTS
(SELECT * FROM elementy_zestawow ez,czesci c
WHERE ez.zestaw=z.id AND ez.czesc=c.id
AND (c.magazyn IS NULL OR c.magazyn<ez.liczba));
ID NAZWA
---------- ----------------
101 Zestaw A
103 Zestaw C
107 Zestaw prosty
zadanie 5
SELECT z1.id,z1.nazwa,z2.id,z2.nazwa
FROM zestawy z1,zestawy z2
WHERE z1.id < z2.id
AND NOT EXISTS (
(SELECT czesc FROM elementy_zestawow WHERE zestaw=z1.id)
MINUS
(SELECT czesc FROM elementy_zestawow WHERE zestaw=z2.id)
)
AND NOT EXISTS (
(SELECT czesc FROM elementy_zestawow WHERE zestaw=z2.id)
MINUS
(SELECT czesc FROM elementy_zestawow WHERE zestaw=z1.id)
)
;
ID NAZWA ID NAZWA
---------- ---------------- ---------- ----------------
102 Zestaw B 108 Zestaw B (x2)
104 Zestaw D 105 Zestaw D (x2)
zadanie 6
SELECT c.id,c.nazwa
FROM czesci c
WHERE c.magazyn>0 AND
NOT EXISTS (SELECT * FROM elementy_zestawow WHERE czesc=c.id);
ID NAZWA
---------- ----------------
5 Obudowa nieznana
15 Procesor E
zadanie 7
SELECT c.id,c.nazwa,
(SELECT count(DISTINCT zestaw) FROM elementy_zestawow WHERE czesc=c.id)
AS liczba_zestawow
FROM czesci c;
ID NAZWA LICZBA_ZESTAWOW
---------- ---------------- ---------------
1 Obudowa A 3
2 Obudowa B 2
3 Obudowa C 1
4 Obudowa D 2
5 Obudowa nieznana 0
11 Procesor A 2
12 Procesor B 2
13 Procesor C 1
14 Procesor D 2
15 Procesor E 0
21 Karta A 1
22 Karta B 2
50 null 1
88 cos z nullem 0
89 cos z zerem 0
99 cos 1
zadanie 8
SELECT z.id,z.nazwa,
(SELECT count(*) FROM elementy_zestawow ez,czesci c
WHERE ez.zestaw=z.id AND ez.czesc=c.id AND ez.liczba>nvl(c.magazyn,0)
) AS brakujace_czesc
FROM zestawy z;
ID NAZWA BRAKUJACE_CZESC
---------- ---------------- ---------------
101 Zestaw A 0
102 Zestaw B 1
103 Zestaw C 0
104 Zestaw D 2
105 Zestaw D (x2) 2
106 Zestaw Unikalny 1
107 Zestaw prosty 0
108 Zestaw B (x2) 2
109 zestaw null 1
zadanie 9
SELECT z.id,z.nazwa,
(SELECT count(DISTINCT rodzaj) FROM elementy_zestawow ez,czesci c
WHERE ez.zestaw=z.id AND ez.czesc=c.id)
AS liczba_rodzajow
FROM zestawy z;
ID NAZWA LICZBA_RODZAJOW
---------- ---------------- ---------------
101 Zestaw A 3
102 Zestaw B 3
103 Zestaw C 2
104 Zestaw D 2
105 Zestaw D (x2) 2
106 Zestaw Unikalny 3
107 Zestaw prosty 1
108 Zestaw B (x2) 3
109 zestaw null 1
zadanie 10
SELECT z.id,z.nazwa
FROM zestawy z
WHERE NOT EXISTS
(SELECT c.rodzaj
FROM elementy_zestawow ez,czesci c
WHERE ez.zestaw=z.id AND ez.czesc=c.id
GROUP BY c.rodzaj
HAVING sum(ez.liczba) > (SELECT sum(nvl(magazyn,0)) FROM czesci WHERE rodzaj=c.rodzaj)
);
ID NAZWA
---------- ----------------
101 Zestaw A
102 Zestaw B
103 Zestaw C
104 Zestaw D
105 Zestaw D (x2)
107 Zestaw prosty