SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE...
-
Upload
graziella-pisano -
Category
Documents
-
view
220 -
download
0
Transcript of SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE...
![Page 1: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/1.jpg)
SQL, esempi
30/10/2014 Basi di dati SQL 1
![Page 2: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/2.jpg)
30/10/2014 Basi di dati SQL 2
CREATE TABLE, esempi
CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo character(20) NOT NULL, cfu numeric NOT NULL)
CREATE TABLE esami( corso numeric REFERENCES corsi (codice), studente numeric REFERENCES studenti (matricola), data date
NOT NULL, voto numeric NOT NULL, PRIMARY KEY (corso, studente))
La chiave primaria viene definita come NOT NULL anche se non lo specifichiamo (in Postgres)
![Page 3: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/3.jpg)
30/10/2014 Basi di dati SQL 3
DDL, in pratica
• In molti sistemi si utilizzano strumenti diversi dal codice SQL per definire lo schema della base di dati
• Vediamo (per un esempio su cui lavoreremo)
![Page 4: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/4.jpg)
30/10/2014 Basi di dati SQL 4
SQL, operazioni sui dati
• interrogazione: • SELECT
• modifica:• INSERT, DELETE, UPDATE
![Page 5: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/5.jpg)
30/10/2014 Basi di dati SQL 5
Nome Età
Persone
RedditoAndrea 27
Maria 55Anna 50
Filippo 26Luigi 50
Franco 60Olga 30
Sergio 85Luisa 75
Aldo 2521
4235304020413587
15
MadreMaternità FiglioLuisa
AnnaAnnaMariaMaria
LuisaMaria
OlgaFilippoAndrea
Aldo
Luigi
PadrePaternità Figlio
LuigiLuigi
FrancoFranco
SergioOlga
FilippoAndrea
Aldo
Franco
![Page 6: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/6.jpg)
30/10/2014 Basi di dati SQL 6
Istruzione SELECT (versione base)
SELECT ListaAttributiFROM ListaTabelle[ WHERE Condizione ]
• "target list"• clausola FROM • clausola WHERE
![Page 7: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/7.jpg)
30/10/2014 Basi di dati SQL 7
Intuitivamente
SELECT ListaAttributiFROM ListaTabelle[ WHERE Condizione ]
• Prodotto cartesiano di ListaTabelle• Selezione su Condizione• Proiezione su ListaAttributi
![Page 8: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/8.jpg)
30/10/2014 Basi di dati SQL 8
Selezione, proiezione e join
• Le persone che guadagnano più di 20, mostrando anche il padre e il reddito
PROJNome,Padre, Reddito (paternita JOIN Figlio =Nome
SELReddito>20 (persone))
select nome, padre, redditofrom persone, paternitawhere figlio = nome and reddito > 20
![Page 9: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/9.jpg)
30/10/2014 Basi di dati SQL 9
Selezione e proiezione
• Nome e reddito delle persone con meno di trenta anni
PROJNome, Reddito(SELEta<30(Persone))
select nome, redditofrom personewhere eta < 30
![Page 10: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/10.jpg)
30/10/2014 Basi di dati SQL 10
Selezione, senza proiezione
• Nome, età e reddito delle persone con meno di trenta anni
SELEta<30(Persone)
select *from personewhere eta < 30
![Page 11: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/11.jpg)
30/10/2014 Basi di dati SQL 11
Proiezione, senza selezione
• Nome e reddito di tutte le personePROJNome, Reddito(Persone)
select nome, redditofrom persone
![Page 12: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/12.jpg)
30/10/2014 Basi di dati SQL 12
Proiezione, con ridenominazione
• Nome e reddito di tutte le personeRENAnni Eta(PROJNome, Eta(Persone))
select nome, eta as annifrom persone
![Page 13: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/13.jpg)
30/10/2014 Basi di dati SQL 13
Espressioni nella target list
select Reddito/12 as redditoMensilefrom Persone
![Page 14: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/14.jpg)
30/10/2014 Basi di dati SQL 14
Condizione complessa
select *from personewhere reddito > 25
and (eta < 30 or eta > 60)
![Page 15: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/15.jpg)
30/10/2014 Basi di dati SQL 15
Condizione “LIKE”
• Le persone che hanno un nome che inizia per 'A' e ha una 'd' come terza lettera
select * from persone where nome like 'A_d%'
![Page 16: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/16.jpg)
30/10/2014 Basi di dati SQL 16
Cognome Filiale EtàMatricola
Neri Milano 455998Bruni Milano NULL9553
Impiegati
SEL (Età > 40) OR (Età IS NULL) (Impiegati)
Rossi Roma 327309 Rossi Roma 327309 Neri Milano 455998Bruni Milano NULL9553
Gestione dei valori nulli
• Gli impiegati la cui età è o potrebbe essere maggiore di 40
![Page 17: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/17.jpg)
30/10/2014 Basi di dati SQL 17
selectcognome, filiale
from impiegati
select distinctcognome, filiale
from impiegati
Proiezione, attenzione
![Page 18: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/18.jpg)
30/10/2014 Basi di dati SQL 18
Nome Età
Persone
RedditoAndrea 27
Maria 55Anna 50
Filippo 26Luigi 50
Franco 60Olga 30
Sergio 85Luisa 75
Aldo 2521
4235304020413587
15
MadreMaternità FiglioLuisa
AnnaAnnaMariaMaria
LuisaMaria
OlgaFilippoAndrea
Aldo
Luigi
PadrePaternità Figlio
LuigiLuigi
FrancoFranco
SergioOlga
FilippoAndrea
Aldo
Franco
![Page 19: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/19.jpg)
30/10/2014 Basi di dati SQL 19
Selezione, proiezione e join
• I padri di persone che guadagnano più di 20
PROJPadre(paternita JOIN Figlio =Nome
SELReddito>20 (persone))
select distinct padrefrom persone, paternitawhere figlio = nome and reddito > 20
![Page 20: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/20.jpg)
30/10/2014 Basi di dati SQL 20
• Le persone che guadagnano più dei rispettivi padri; mostrare nome, reddito e reddito del padre
PROJNome, Reddito, RP (SELReddito>RP
(RENNP,EP,RP Nome,Eta,Reddito(persone)JOINNP=Padre
(paternita JOIN Figlio =Nome persone)))
select f.nome, f.reddito, p.redditofrom persone p, paternita, persone fwhere p.nome = padre and
figlio = f.nome andf.reddito > p.reddito
![Page 21: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/21.jpg)
30/10/2014 Basi di dati SQL 21
SELECT, con ridenominazione del risultato
select figlio, f.reddito as reddito, p.reddito as redditoPadre
from persone p, paternita, persone fwhere p.nome = padre and figlio = f.nome
and f.reddito > p.reddito
![Page 22: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/22.jpg)
30/10/2014 Basi di dati SQL 22
Join esplicito
• Padre e madre di ogni persona
select paternita.figlio,padre, madrefrom maternita, paternitawhere paternita.figlio = maternita.figlio
select madre, paternita.figlio, padre from maternita join paternita on
paternita.figlio = maternita.figlio
![Page 23: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/23.jpg)
30/10/2014 Basi di dati SQL 23
• Le persone che guadagnano più dei rispettivi padri; mostrare nome, reddito e reddito del padre
select f.nome, f.reddito, p.redditofrom persone p, paternita, persone fwhere p.nome = padre and
figlio = f.nome andf.reddito > p.reddito
select f.nome, f.reddito, p.redditofrom (persone p join paternita on p.nome = padre)
join persone f on figlio = f.nome
where f.reddito > p.reddito
![Page 24: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/24.jpg)
30/10/2014 Basi di dati SQL 24
Join esterno: "outer join"
• Padre e, se nota, madre di ogni persona
select paternita.figlio, padre, madrefrom paternita left join maternita
on paternita.figlio = maternita.figlio
select paternita.figlio, padre, madrefrom paternita left outer join maternita
on paternita.figlio = maternita.figlio
• outer e' opzionale
![Page 25: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/25.jpg)
30/10/2014 Basi di dati SQL 25
Ordinamento del risultato
• Nome e reddito delle persone con meno di trenta anni in ordine alfabetico
select nome, redditofrom personewhere eta < 30order by nome
![Page 26: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/26.jpg)
30/10/2014 Basi di dati SQL 26
Unione
select A, Bfrom Runionselect A , Bfrom S
select A, Bfrom Runion allselect A , Bfrom S
![Page 27: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/27.jpg)
30/10/2014 Basi di dati SQL 27
Notazione posizionale!
select padre, figlio from paternitaunionselect madre, figliofrom maternita
![Page 28: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/28.jpg)
30/10/2014 Basi di dati SQL 28
Luisa
AnnaAnnaMariaMaria
LuisaMaria
OlgaFilippoAndrea
Aldo
Luigi
Figlio
LuigiLuigi
FrancoFranco
SergioOlga
FilippoAndrea
Aldo
Franco
Luisa
AnnaAnnaMariaMaria
LuisaMaria
OlgaFilippoAndrea
Aldo
Luigi
Padre Figlio
LuigiLuigi
FrancoFranco
SergioOlga
FilippoAndrea
Aldo
Franco
![Page 29: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/29.jpg)
30/10/2014 Basi di dati SQL 29
Notazione posizionale, 2
select padre, figliofrom paternitaunionselect figlio, madrefrom maternita
NO!
select padre, figliofrom paternitaunionselect madre, figliofrom maternita
OK
![Page 30: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/30.jpg)
30/10/2014 Basi di dati SQL 30
Notazione posizionale, 3
• Anche con le ridenominazioni non cambia niente:select padre as genitore, figliofrom paternitaunionselect figlio, madre as genitorefrom maternita
• Corretta:select padre as genitore, figliofrom paternitaunionselect madre as genitore, figlio from maternita
![Page 31: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/31.jpg)
30/10/2014 Basi di dati SQL 31
Differenza
select Nomefrom Impiegatoexceptselect Cognome as Nomefrom Impiegato
![Page 32: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/32.jpg)
30/10/2014 Basi di dati SQL 32
Intersezione
select Nomefrom Impiegatointersectselect Cognome as Nomefrom Impiegato
![Page 33: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/33.jpg)
30/10/2014 Basi di dati SQL 33
Operatori aggregati: COUNT
• Il numero di figli di Franco
select count(*) as NumFigliDiFrancofrom Paternitawhere Padre = 'Franco'
![Page 34: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/34.jpg)
30/10/2014 Basi di dati SQL 34
COUNT DISTINCT
select count(*) from persone
select count(reddito) from persone
select count(distinct reddito) from persone
![Page 35: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/35.jpg)
30/10/2014 Basi di dati SQL 35
Altri operatori aggregati
• SUM, AVG, MAX, MIN
• Media dei redditi dei figli di Franco
select avg(reddito) from persone join paternita on nome=figlio where padre='Franco'
![Page 36: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/36.jpg)
30/10/2014 Basi di dati SQL 36
Operatori aggregati e valori nulli
select avg(reddito) as redditomediofrom persone
![Page 37: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/37.jpg)
30/10/2014 Basi di dati SQL 37
Operatori aggregati e target list
• un’interrogazione scorretta:
select nome, max(reddito)from persone
• di chi sarebbe il nome? La target list deve essere omogenea
select min(eta), avg(reddito)from persone
![Page 38: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/38.jpg)
30/10/2014 Basi di dati SQL 38
• Il numero di figli di ciascun padre
select Padre, count(*) AS NumFiglifrom paternitagroup by Padre
Operatori aggregati e raggruppamenti
![Page 39: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/39.jpg)
30/10/2014 Basi di dati SQL 39
Condizioni sui gruppi
• I padri i cui figli hanno un reddito medio maggiore di 25; mostrare padre e reddito medio dei figli
select padre, avg(f.reddito)from persone f join paternita on figlio = nome group by padre having avg(f.reddito) > 25
![Page 40: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/40.jpg)
30/10/2014 Basi di dati SQL 40
Interrogazioni nidificate(nested query o subquery)
![Page 41: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/41.jpg)
30/10/2014 Basi di dati SQL 41
Massimo e nidificazione
• La persona (o le persone) con il reddito massimo
select *from personewhere reddito = ( select max(reddito)
from persone)
![Page 42: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/42.jpg)
30/10/2014 Basi di dati SQL 42
• nome e reddito del padre di Franco
select Nome, Redditofrom Persone, Paternitawhere Nome = Padre and Figlio = 'Franco'
select Nome, Redditofrom Personewhere Nome = ( select Padre
from Paternita where Figlio = 'Franco')
![Page 43: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/43.jpg)
30/10/2014 Basi di dati SQL 43
• Nome e reddito dei padri di persone che guadagnano più di 20
select distinct P.Nome, P.Redditofrom Persone P, Paternita, Persone Fwhere P.Nome = Padre and Figlio = F.Nome
and F.Reddito > 20
select Nome, Redditofrom Personewhere Nome in (select Padre
from Paternitawhere Figlio = any (select Nome
from Personewhere Reddito > 20))
notare la distinct
![Page 44: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/44.jpg)
30/10/2014 Basi di dati SQL 44
• Nome e reddito dei padri di persone che guadagnano più di 20
select distinct P.Nome, P.Redditofrom Persone P, Paternita, Persone Fwhere P.Nome = Padre and Figlio = F.Nome
and F.Reddito > 20
select Nome, Redditofrom Personewhere Nome in (select Padre
from Paternita, Persone where Figlio = Nomeand Reddito > 20)
![Page 45: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/45.jpg)
30/10/2014 Basi di dati SQL 45
• Nome e reddito dei padri di persone che guadagnano più di 20, con indicazione del reddito del figlio
select distinct P.Nome, P.Reddito, F.Redditofrom Persone P, Paternita, Persone Fwhere P.Nome = Padre and Figlio = F.Nome
and F.Reddito > 20
select Nome, Reddito, ???? from Personewhere Nome in (select Padre
from Paternitawhere Figlio = any (select Nome
from Personewhere Reddito > 20))
![Page 46: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/46.jpg)
30/10/2014 Basi di dati SQL 46
• Le persone che hanno almeno un figlio
select * from Persone where exists ( select *
from Paternita where Padre = Nome)
or exists ( select *
from Maternita where Madre = Nome)
![Page 47: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/47.jpg)
30/10/2014 Basi di dati SQL 47
• I padri i cui figli guadagnano tutti più di 20
select distinct Padre from Paternita Z where not exists (
select * from Paternita W, Persone where W.Padre = Z.Padre
and W.Figlio = Nome and Reddito <= 20)
![Page 48: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/48.jpg)
select distinct padrefrom paternita p1where padre NOT IN (select padre from paternita p2 join persone on figlio = nome where reddito < 40 )
30/10/2014 Basi di dati SQL 48
![Page 49: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/49.jpg)
30/10/2014 Basi di dati SQL 49
• I padri i cui figli guadagnano tutti più di 20
select distinct Padre from Paternita where not exists (
select * from Persone where Figlio = Nome
and Reddito <= 20)
NO!!!
![Page 50: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/50.jpg)
30/10/2014 Basi di dati SQL 50
Disgiunzione e unione (ma non sempre)select * from Persone where Reddito > 30
union select F.*from Persone F, Paternita, Persone Pwhere F.Nome = Figlio and Padre = P.Nome
and P.Reddito > 30
select *from Persone Fwhere Reddito > 30 or
exists (select *from Paternita, Persone Pwhere F.Nome = Figlio and Padre =
P.Nomeand P.Reddito > 30)
![Page 51: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/51.jpg)
30/10/2014 Basi di dati SQL 51
Differenza e nidificazione
select Nome from Impiegatoexceptselect Cognome as Nome from Impiegato
select Nomefrom Impiegato Iwhere not exists (select *
from Impiegatowhere Cognome = I.Nome)
![Page 52: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/52.jpg)
30/10/2014 Basi di dati SQL 52
Operazioni di aggiornamento
![Page 53: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/53.jpg)
30/10/2014 Basi di dati SQL 53
INSERT INTO Persone VALUES ('Mario',25,52)
INSERT INTO Persone(Nome, Reddito, Eta) VALUES('Pino’,52,23)
INSERT INTO Persone(Nome, Reddito) VALUES('Lino',55)
INSERT INTO Persone ( Nome )SELECT PadreFROM PaternitaWHERE Padre NOT IN (SELECT Nome FROM Persone)
![Page 54: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/54.jpg)
30/10/2014 Basi di dati SQL 54
Eliminazione di ennuple
DELETE FROM Tabella [ WHERE Condizione ]
![Page 55: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/55.jpg)
30/10/2014 Basi di dati SQL 55
DELETE FROM PersoneWHERE Eta < 35
DELETE FROM PaternitaWHERE Figlio NOT in ( SELECT Nome FROM Persone)
DELETE FROM Paternita
![Page 56: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/56.jpg)
30/10/2014 Basi di dati SQL 56
Modifica di ennuple
UPDATE NomeTabellaSET Attributo = < Espressione |
SELECT … | NULL | DEFAULT >
[ WHERE Condizione ]
![Page 57: SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.](https://reader036.fdocuments.us/reader036/viewer/2022062512/5542eb76497959361e8e0256/html5/thumbnails/57.jpg)
30/10/2014 Basi di dati SQL 57
UPDATE Persone SET Reddito = 45WHERE Nome = 'Piero'
UPDATE Persone SET Reddito = Reddito * 1.1WHERE Eta < 30