27

Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join
Page 2: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Argomenti della lezione

  Interrogazioni complesse in SQL  join esplicito  outer join  operatori aggregati  interrogazioni nidificate

Page 3: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Nome Età

Persone

Reddito Andrea 27

Maria 55 Anna 50

Filippo 26 Luigi 50

Franco 60 Olga 30

Sergio 85 Luisa 75

Aldo 25 21

42 35 30 40 20 41 35 87

15

Madre Maternità Figlio Luisa

Anna Anna Maria Maria

Luisa Maria

Olga Filippo Andrea

Aldo

Luigi

Padre Paternità Figlio

Luigi Luigi

Franco Franco

Sergio Olga

Filippo Andrea

Aldo

Franco

Page 4: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Join esplicito

 Padre e madre di ogni persona

paternita JOIN maternita

PROJFiglio,Padre,Madre(paternita JOIN Figlio = Nome

RENNome Figlio(maternita))

Page 5: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

select paternita.figlio, padre, madre from maternita, paternita where maternita.figlio = paternita.figlio

select paternita.figlio, padre, madre from maternita join paternita

on maternita.figlio = paternita.figlio

select paternita.figlio, padre, madre from maternita natural join paternita

Page 6: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

select paternita.figlio, padre, madre from maternita join paternita

on maternita.figlio = paternita.figlio

Outer join

select paternita.figlio, padre, madre from maternita left join paternita

on maternita.figlio = paternita.figlio

select paternita.figlio, padre, madre from maternita full join paternita

on maternita.figlio = paternita.figlio

Page 7: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Ordinamento del risultato  Nome e reddito delle persone con

meno di trenta anni  in ordine alfabetico

select nome, reddito from persone where eta < 30 order by nome

Page 8: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Persone

Nome Reddito Andrea 21

Aldo 15 Filippo 30

Persone

Nome Reddito

Andrea 21 Aldo 15

Filippo 30

select nome, reddito

from persone where eta < 30

select nome, reddito

from persone where eta < 30 order by nome

Page 9: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Operatori aggregati

  Il numero di figli di Franco

select count(*) AS NumFigliDiFranco

from Paternita where Padre = 'Franco'

Page 10: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Padre Paternità Figlio

Luigi Luigi

Sergio Olga

Filippo Franco Franco

Andrea Aldo

Franco

Franco Franco

Andrea Aldo

NumFigliDiFranco 2

Page 11: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

  Il numero di figli di ciascun padre

select Padre, count(*) AS NumFigli from Paternita group by Padre

Page 12: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Padre Paternità Figlio

Luigi Luigi

Sergio Olga

Filippo Franco Franco

Andrea Aldo

Franco

Padre NumFigli

Luigi Sergio

2 Franco 2

1

Page 13: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Altri operatori aggregati

 Somma: SUM  Media: AVG  Massimo: MAX  Minimo: MIN

Page 14: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Unione

 La select da sola non permette di fare unioni; serve un costrutto esplicito:

SELECT … UNION SELECT ...

Page 15: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Notazione posizionale!

select padre from paternita union select madre from maternita

 quali nomi per gli attributi del risultato?

Page 16: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Luisa

Anna Anna Maria Maria

Luisa Maria

Olga Filippo Andrea

Aldo

Luigi

Figlio

Luigi Luigi

Franco Franco

Sergio Olga

Filippo Andrea

Aldo

Franco

Luisa

Anna Anna Maria Maria

Luisa Maria

Olga Filippo Andrea

Aldo

Luigi

Padre Figlio

Luigi Luigi

Franco Franco

Sergio Olga

Filippo Andrea

Aldo

Franco

Page 17: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Notazione posizionale

select padre, figlio from paternita union select figlio, madre from maternita

select padre, figlio from paternita union select madre, figlio from maternita

Page 18: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

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

Page 19: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Interrogazioni nidificate

le condizioni atomiche permettono anche   il confronto fra un attributo e il

risultato di una sottointerrogazione   quantificazioni esistenziali

Page 20: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

  nome e reddito del padre di Mario

select Nome, Reddito from Persone, Paternita where Nome = Padre and Figlio = 'Mario'

Page 21: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

  nome e reddito del padre di Mario

select Nome, Reddito from Persone where Nome = (select Padre from Paternita where Figlio = 'Mario')

Page 22: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

  Nome e reddito dei padri di persone che guadagnano più di 20 milioni

select distinct P.Nome, P.Reddito from Persone P, Paternita, Persone F where P.Nome = Padre and Figlio = F.Nome and F.Reddito > 20

Page 23: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

  Nome e reddito dei padri di persone che guadagnano più di 20 milioni

select Nome, Reddito from Persone where Nome in (select Padre from Paternita where Figlio =any (select Nome from Persone where Reddito > 20))

Page 24: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

 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 25: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Quantificazione esistenziale

 possiamo avere condizioni del tipo:  EXISTS ( Sottoespressione )

Page 26: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

  I padri i cui figli guadagnano tutti più di venti milioni

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 27: Argomenti della lezionescienzepolitiche.unical.it/bacheca/archivio/materiale/... · 2017-11-15 · Argomenti della lezione Interrogazioni complesse in SQL join esplicito outer join

Argomenti della lezione

  Interrogazioni complesse in SQL  join esplicito  outer join  operatori aggregati  interrogazioni nidificate