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

