• Non ci sono risultati.

IL LINGUAGGIO SQL

N/A
N/A
Protected

Academic year: 2021

Condividi "IL LINGUAGGIO SQL"

Copied!
31
0
0

Testo completo

(1)

IL LINGUAGGIO SQL

(Standard Query Language)

(2)

SQL

Linguaggio standard per interrogare (=consultare) una base di dati relazionale

Linguaggio dichiarativo

il programmatore esprime QUALI dati recuperare, e non COME FARE per recuperarli

Non vedremo tutti i dettagli, ma abbastanza per fare le

interrogazioni più frequenti

(3)

SQL

Struttura di una query:

SELECT [attributo1, attributo2, ..., attributon]

FROM [tabella1, tabella2, ..., tabella m]

{WHERE condizione}

(4)

SQL

Consideriamo il “solito” db con le informazioni su studenti, corsi ed esami

Schema:

Studenti(matricola,nome,cognome,data_di_nascita) Corsi(id,descrizione,CFU)

Esami(studente,corso,voto)

(5)

Possibile istanza:

matricola nome cognome data_di_nascita

1234 Paolo Rossi 12/07/1989 5555 Laura Verdi 02/04/1990 3322 Mario Gialli 22/05/1988 1121 Laura Blu 22/05/1988

Studenti

Corsi

id descrizione CFU

INF1 informatica 1 6

studente corso voto

1234 INF1 23

1234 FIS 30

5555 FIS 21

5555 INF1 24

5555 INF2 30

1121 INF1 30

1121 INF2 30

Esami

(6)

PROIEZIONE

Nome e cognome di tutti gli studenti:

SELECT nome, cognome FROM Studenti

matricola nome cognome data_di_nascita

1234 Paolo Rossi 12/07/1989 5555 Laura Verdi 02/04/1990 3322 Mario Gialli 22/05/1988 1121 Laura Blu 22/05/1988

(7)

PROIEZIONE

Nome e cognome di tutti gli studenti:

SELECT nome, cognome FROM Studenti

nome cognome Paolo Rossi Laura Verdi Mario Gialli

Laura Blu

(8)

SELEZIONE

Elenco dei corsi che hanno almeno 4 CFU SELECT *

FROM Corsi

WHERE CFU>=4

id descrizione CFU

INF1 informatica 1 6

INF2 informatica 1I 5

FIS matematicafisica 2

(9)

SELEZIONE

Elenco dei corsi che hanno almeno 4 CFU SELECT *

FROM Corsi

WHERE CFU>=4

id descrizione CFU

INF1 informatica 1 6

INF2 informatica 1I 5

(10)

SELEZIONE + PROIEZIONE

Descrizione e CFU dei corsi che hanno almeno 4 CFU SELECT descrizione, CFU

FROM Corsi

WHERE CFU>=4

id descrizione CFU

INF1 informatica 1 6

INF2 informatica 1I 5

FIS matematicafisica 2

(11)

SELEZIONE + PROIEZIONE

Descrizione e CFU dei corsi che hanno almeno 4 CFU SELECT descrizione, CFU

FROM Corsi

WHERE CFU>=4

descrizione CFU

informatica 1 6

informatica 1I 5

(12)

PRODOTTO CARTESIANO

SELECT *

FROM Esami,Corsi

id descrizione CFU

INF1 informatica 1 6

INF2 informatica 1I 5

FIS matematicafisica 2 studente corso voto

1234 INF1 23

1234 FIS 30

5555 FIS 21

5555 INF1 24

5555 INF2 30

1121 INF1 30

(13)

PRODOTTO CARTESIANO

SELECT *

FROM Esami,Corsi

id descrizione CFU

INF1 informatica 1 6

INF2 informatica 1I 5

FIS matematicafisica 2

INF1 informatica 1 6

INF2 informatica 1I 5

FIS matematicafisica 2 studente corso voto

1234 INF1 23

1234 INF1 23

1234 INF1 23

1234 FIS 30

1234 FIS 30

1234 FIS 30

(14)

RIFLESSIONE

Elencare più tabelle nella clausola FROM corrisponde ad eseguire il prodotto cartesiano

Con il prodotto cartesiano “unisco” anche informazioni che, nella realtà, sono scorrelate

Necessità di un prodotto cartesiano “intelligente”, che leghi le sole informazioni correlate (= stesso valore per gli attributi

corrispondenti)

(15)

JOIN

Elenco degli esami (nome per esteso e CFU) SELECT *

FROM Esami, Corsi WHERE id=corso

studente corso voto id descrizione CFU

1234 INF1 23 INF1 informatica 1 6

1234 FIS 30 FIS matematicafisica 2

5555 FIS 21 FIS matematicafisica 2

5555 INF1 24 INF1 informatica 1 6

5555 INF2 30 INF2 5

(16)

JOIN (CON PROIEZIONE)

Matricola, nome del corso e voto degli esami superati:

SELECT studente,voto,descrizione FROM Esami, Corsi

WHERE id=corso

studente corso voto id descrizione CFU

1234 INF1 23 INF1 informatica 1 6

1234 FIS 30 FIS matematicafisica 2

5555 FIS 21 FIS matematicafisica 2

5555 INF1 24 INF1 informatica 1 6

5555 INF2 30 INF2 informatica 1I 5

(17)

JOIN (CON PROIEZIONE)

Matricola, nome del corso e voto degli esami superati:

SELECT studente,voto,descrizione FROM Esami, Corsi

WHERE id=corso

studente voto descrizione

1234 23 informatica 1

1234 30 matematicafisica

5555 21 matematicafisica

5555 24 informatica 1

5555 30 informatica 1I

(18)

JOIN (CON PROIEZIONE)

Nome studente, nome del corso e voto degli esami superati:

SELECT nome,cognome,voto,descrizione FROM Esami, Corsi, Studenti

WHERE id=corso AND matricola=studente

nome cognome voto descrizione

Paolo Rossi 23 informatica 1

Paolo Rossi 30 matematicafisica Laura Verdi 21 matematicafisica

Laura Verdi 24 informatica 1

Laura Verdi 30 informatica 1I

(19)

RIDENOMINAZIONE

Posso rinominare tabelle e campi:

Se ho campi con lo stesso nome in tabelle diverse, uso la notazione con il punto:

SELECT *

FROM Esami as E

SELECT *

SELECT studente AS matricola_studente

FROM Esami

(20)

DIFFERENZA INSIEMISTICA

Eseguibile solo tra tabelle (o risultati di query) aventi lo stesso schema=stessi campi

Matricole degli studenti che non hanno sostenuto esami:

SELECT matricola as stud FROM Studenti

MINUS

SELECT studente as stud

FROM Esami

(21)

LA QUERY PIÙ SEMPLICE

Elenco degli studenti:

SELECT *

FROM Studenti

matricola nome cognome data_di_nascita

1234 Paolo Rossi 12/07/1989 5555 Laura Verdi 02/04/1990 3322 Mario Gialli 22/05/1988 1121 Laura Blu 22/05/1988

(22)

LA QUERY PIU’ DIFFICILE (1)

Genitori_Figli

Vogliamo i nomi dei genitori che hanno solo figli maggiorenni

Genitore Figlio EtaFiglio

Mario Anna 21

Mario Paolo 15

Lucia Silvia 19

Salvo Luca 4

Renato Giada 23 Renato Elena 29

(23)

LA QUERY PIU’ DIFFICILE (2)

Genitori_Figli

Genitore Figlio EtaFiglio

Mario Anna 21

Mario Paolo 15

Lucia Silvia 19

Salvo Luca 4

Renato Giada 23 Renato Elena 29

(24)

LA QUERY PIU’ DIFFICILE (3)

Genitori_Figli

SELECT Genitore

FROM Genitori_Figli

Genitore Figlio EtaFiglio

Mario Anna 21

Mario Paolo 15

Lucia Silvia 19

Salvo Luca 4

Renato Giada 23 Renato Elena 29

(25)

LA QUERY PIU’ DIFFICILE (4)

Genitori_Figli

SELECT Genitore

Genitore Figlio EtaFiglio

Mario Anna 21

Mario Paolo 15

Lucia Silvia 19

Salvo Luca 4

Renato Giada 23 Renato Elena 29

(26)

LA QUERY PIU’ DIFFICILE (5)

Soluzione: differenza insiemistica

Sottraggo dall’insieme dei genitori l’insieme dei genitori che hanno almeno un figlio minorenne

SELECT Genitore

FROM Genitori_Figli MINUS

SELECT Genitore

FROM Genitori_Figli

(27)

UN GIOCHINO (1)

Con l’SQL si può “fare tutto”?

Risposta: con l’SQL “di base” (visto finora) NO

Esempio query banale: contare il numero di studenti in archivio

L’SQL è esteso con funzioni di aggregazione tipo COUNT,

MAX, MIN, AVG, ecc.

(28)

UN GIOCHINO (2)

Tabella R con un solo attributo A

voglio trovare il valore massimo dell’attributo A nella tabella R

Posso procedere come segue:

individuo l’insieme S dei valori di A che NON sono massimi

dall’insieme di tutti i valori di A in R sottraggo S (differenza insiemistica)

(29)

UN GIOCHINO (3)

Come faccio ad individuare l’insieme S dei “non-massimi”?

Faccio il prodotto cartesiano di R con sé stessa

Ottengo delle coppie (a1,a2) dove a1 e a2 sono valori assunti dal campo A in R

Seleziono a1 nel caso sia a1<a2, ossia a1 non è massimo

(30)

UN GIOCHINO (4)

R

A

23 55

2

R x R

A

23 23 23 55 55 55

2 2 2

A 23 55

2 23 55

2 23 55

2

Insieme S dei “non-massimi”

Differenza

A 23 55

2

A 23

2

-

(31)

UN GIOCHINO (5)

SELECT A FROM R MINUS

SELECT R1.A as A

FROM R as R1, R as R2

WHERE R1.A<R2.A

Riferimenti

Documenti correlati

Finn aveva da raccontare un sacco di cose a Supergabi: tutto quello che era successo da quando si erano separati in quel vicolo, e di Toby e di Tib e di Sir Percival rinchiuso

Il ricavato al netto delle spese di stampa e spedizione del libro andrà a sostenere i progetti delle associazioni:.

She has published more than 60 peer-reviewed scientific articles (including on Science, Nature, PNAS) and has been Guest Editor of various international

Luogo di lavoro: Centro di ricerca difesa e certificazione (CREA-DC) - Via Carlo Giuseppe Bertero, 22 - 00156 Roma (ex Centro di ricerca per la patologia vegetale

RIEPILOGO FINALE DEI VOTI IN TUTTE LE SEZIONI.. COMUNE

Come l’Europa, anche la sinistra sta in piedi solo se unita: “United we stand, divided we fall”, divisi saremo tutti più deboli».

-ovvero in ipotesi di mancata risposta anche del titolare del potere sostitutivo, entro i termini previsti, da parte delle pubbliche amministrazioni cui è stata inoltrata la

Docente in corsi di formazione in materia salute e sicurezza nei luoghi di lavoro Attività di progettazione, organizzazione e coordinamento di progetti sia di tipo formativo che