select * from impiegato;


CREATE TABLE Dipartimento (
       NomeDip		  CHAR(15) PRIMARY KEY,
);

drop table impiegato;

CREATE TABLE Impiegato(
	Matricola CHAR(6),
	Nome CHAR(20),
 	Cognome CHAR(20),
	Stipendio NUMERIC(9) DEFAULT 0,  
	Dipart CHAR(15),	
	FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip),  
  	PRIMARY KEY (Cognome,Nome)  
);


desc impiegato;

insert into impiegato set matricola="1232", cognome=NULL, nome=NULL, stipendio=1000;

select * from impiegato;

show tables;


CREATE TABLE Vigili (
   Matricola integer primary key,
   nome varchar(50),
   cognome varchar(50)
);



CREATE TABLE Infrazioni(
	Codice CHAR(6) NOT NULL PRIMARY KEY, 
 	Data DATE NOT NULL,  
  	Vigile INTEGER NOT NULL REFERENCES Vigili(Matricola),  
 	Provincia CHAR(2),  
  	Numero CHAR(6) ,
);

desc vigili;

desc infrazioni;

alter table infrazioni change provincia  provincia char(2) not null;

select * from infrazioni;

desc canzoni;

create index pertitolo on canzoni (titolo);


# altro esempio


select nome, reddito
from persone;


select persone.nome as tizio, persone.reddito as salario
from persone
where persone.eta < 30;

select * from persone where eta < 30;


select reddito/12 as redditomensile
from persone
where nome="Luigi";

select *
from persone
where  nome like 'A_d%e%';


select * from impiegati where eta > 40 or eta is null;


Il reddito delle persone i cui padri sono ultracinquantenni.

select figli.reddito
from  persone as padri, paternita, persone as figli
where figlio=figli.nome and padre=padri.nome and padri.eta > 50;


select paternita.figlio
from persone as padri, paternita, maternita, persone as madri, persone as figli
where paternita.figlio=maternita.figlio
and padri.nome=padre and madri.nome=madre and paternita.figlio=figli.nome
and padri.reddito + madri.reddito + figli.reddito > 30;



select figli.nome as figlio, figli.reddito as redditoFiglio, padri.reddito as redditPadre
from persone as padri join paternita on padri.nome = padre
     join persone as figli on figli.nome = figlio
where padri.reddito < figli.reddito;


select count(figlio)
from paternita
where padre='Franco';


select count(reddito) from persone;

select nome, reddito/12
from persone
where eta < 30
order by reddito desc;

update persone set reddito=NULL where nome='Aldo';

select avg(reddito), count(eta)
from persone
group by eta;

select madre, count(*) as numFigli
from maternita
group by madre
order by numFigli;

select padre, padri.reddito, avg(figli.reddito)
from persone as padri, paternita, persone as figli
where padri.nome=padre and figli.nome=figlio
group by padre;

select *
from paternita join persone on figlio=nome;

select padre, avg(reddito)
from paternita join persone on figlio=nome
group by padre
having avg(reddito) > 25;



select f.nome, f.reddito, p.reddito from persone as p, paternita, persone as f
where p.nome = padre and figlio = f.nome and f.reddito > p.reddito;

select f.nome, f.reddito, p.reddito from persone p join paternita on p.nome = padre join persone f on figlio = f.nome where f.reddito > p.reddito;

select paternita.figlio, padre, madre
from paternita left outer join maternita
on paternita.figlio = maternita.figlio;

select padre,figlio from paternita
union
select figlio,madre as genitore from maternita;

desc impiegati;

select nome from impiegati;


select * from persone;

insert into persone values ("Marco", 54, 40);

insert into persone (Eta, Nome) values (20, "Gianni");


select * from persone;

insert into paternita values ('Paolo','Gianni');

insert into persone (nome)
select padre 
from paternita
where figlio='Gianni';

select * from impiegati;

insert into impiegati values (6356,"Verdi", "Roma",45);


select * from persone;

delete from persone;

desc paternita;


create table pat2 (padre varchar(50), figlio varchar(50));

select * from pat2;

insert into pat2 select * from paternita;

delete from pat2;


select * from persone;

update persone set reddito=60 where nome="Aldo";

update persone set reddito=reddito*1.1 where eta < 30;



create table esame (
  corso varchar(50),
  voto int check (voto >= 18 and voto <= 30),
  lode varchar(10) check (lode is NULL or voto=30)
);

drop table esame;

insert into esame values ("Inf I", 27, "e lode");

select * from esame;
