18-SQL Definizione e interrogazione 06 -...

54
1 SQL, Definizione e interrogazione di basi di dati Capitolo 4: SQL ( SQL ( Slides Slides da da Atzeni Atzeni , Ceri, , Ceri, Paraboschi, Paraboschi, Torlonee Torlonee , Basi di dati , Basi di dati McGraw McGraw- Hill Hill , 2002) , 2002) SQL, Definizione e interrogazione di basi di dati 2 04/01/2010 SQL Structured Query Language è un linguaggio con varie funzionalità: contiene sia il DDL che il DML ne esistono varie versioni vediamo gli aspetti essenziali, non i dettagli

Transcript of 18-SQL Definizione e interrogazione 06 -...

Page 1: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

1

SQL, Definizione e interrogazione di basi di dati

Capitolo 4: SQL (SQL (SlidesSlides da da AtzeniAtzeni, Ceri, , Ceri, Paraboschi, Paraboschi, TorloneeTorlonee, Basi di dati, Basi di datiMcGrawMcGraw--HillHill, 2002), 2002)

SQL, Definizione e interrogazione di basi di dati 204/01/2010

SQL

Structured Query Languageè un linguaggio con varie funzionalità:

contiene sia il DDL che il DMLne esistono varie versioni vediamo gli aspetti essenziali, non idettagli

Page 2: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

2

SQL, Definizione e interrogazione di basi di dati 304/01/2010

Breve storia dell‘SQLSQL: Structured Query LanguageSQL sviluppato alla IBM nel 1973

Dal 1983 standard de factoPrimo standard nel 1986 rivisto nel 1989 (SQL-89)Secondo standard nel 1992 (SQL-2 o SQL-92)Terzo standard nel 1999 (SQL-3 o SQL-99)

Quasi tutti i DBMS commerciali adottano lo standard SQL piu’ estensioni proprie (non-standard)Alcuni sistemi commerciali

Oracle, Informix, Sybase, DB2, SQL-Server, etc.Alcuni sistemi open-source:

MySQL, PostgresEsistono sistemi commerciali che utilizzano interfacce tipo QBE (Query byExample): ACCESS

Tuttavia hanno sistemi per la traduzione automatica in SQL

SQL, Definizione e interrogazione di basi di dati 404/01/2010

Definizione dei dati in SQL

Istruzione CREATE TABLE:definisce uno schema di relazione e ne crea un’istanza vuotaspecifica attributi, domini e vincoli

Page 3: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

3

SQL, Definizione e interrogazione di basi di dati 504/01/2010

CREATE TABLE, esempio

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

Dipartimento(NomeDip), UNIQUE (Cognome,Nome)

)

SQL, Definizione e interrogazione di basi di dati 604/01/2010

Domini

Domini elementari (predefiniti)Domini definiti dall'utente (semplici, ma riutilizzabili)

Page 4: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

4

SQL, Definizione e interrogazione di basi di dati 704/01/2010

Domini elementari

Carattere: singoli caratteri o stringhe, anche di lunghezza variabile Bit: singoli booleani o stringheNumerici, esatti e approssimatiData, oraSistemi diversi estendono il set di base con domini non standard (vettori, periodi, ecc.)

SQL, Definizione e interrogazione di basi di dati 804/01/2010

Definizione di domini

Istruzione CREATE DOMAIN:definisce un dominio (semplice), utilizzabile indefinizioni di relazioni, anche con vincoli evalori di default

Page 5: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

5

SQL, Definizione e interrogazione di basi di dati 904/01/2010

CREATE DOMAIN, esempio

CREATE DOMAIN Voto AS SMALLINT DEFAULT NULLCHECK ( value >=18 AND value <= 30 )

SQL, Definizione e interrogazione di basi di dati 1004/01/2010

Vincoli intrarelazionali

NOT NULLUNIQUE definisce chiaviPRIMARY KEY: chiave primaria (una sola,implica NOT NULL)CHECK, vedremo più avanti

Page 6: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

6

SQL, Definizione e interrogazione di basi di dati 1104/01/2010

UNIQUE e PRIMARY KEY

due forme:nella definizione di un attributo, se forma da solo la chiavecome elemento separato

SQL, Definizione e interrogazione di basi di dati 1204/01/2010

CREATE TABLE, esempio

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

Dipartimento(NomeDip), UNIQUE (Cognome,Nome)

)

Page 7: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

7

SQL, Definizione e interrogazione di basi di dati 1304/01/2010

Matricola CHAR(6) PRIMARY KEY

Matricola CHAR(6),…,PRIMARY KEY (Matricola)

PRIMARY KEY, alternative

SQL, Definizione e interrogazione di basi di dati 1404/01/2010

CREATE TABLE, esempio

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

Dipartimento(NomeDip), UNIQUE (Cognome,Nome)

)

Page 8: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

8

SQL, Definizione e interrogazione di basi di dati 1504/01/2010

Chiavi su più attributi, attenzione

Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, UNIQUE (Cognome,Nome),

Nome CHAR(20) NOT NULL UNIQUE, Cognome CHAR(20) NOT NULL UNIQUE,

Non è la stessa cosa!

SQL, Definizione e interrogazione di basi di dati 1604/01/2010

Vincoli interrelazionali

CHECK, vedremo più avantiREFERENCES e FOREIGN KEY permettono didefinire vincoli di integrità referenzialedi nuovo due sintassi

per singoli attributisu più attributi

E' possibile definire politiche di reazione allaviolazione

Page 9: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

9

SQL, Definizione e interrogazione di basi di dati 1704/01/2010

Matricola398732959345

Vigili CognomeRossiNeriNeri

NomeLucaPieroMario

Mori Gino7543

InfrazioniCodice34321

733216452153524

Data1/2/954/3/955/4/965/2/98

Vigile3987329532959345

Prov NumeroMITOPRPR

39548KE39548839548839548

SQL, Definizione e interrogazione di basi di dati 1804/01/2010

InfrazioniCodice34321

733216452153524

Data1/2/954/3/955/4/965/2/98

Vigile3987329532959345

Prov NumeroMITOPRPR

39548KE39548839548839548

Auto Prov NumeroMITOPR

39548KE39548839548

CognomeRossiRossiNeri

NomeMarioMarioLuca

Page 10: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

10

SQL, Definizione e interrogazione di basi di dati 1904/01/2010

CREATE TABLE, esempio

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) ,FOREIGN KEY(Provincia, Numero)

REFERENCES Auto(Provincia, Numero))

SQL, Definizione e interrogazione di basi di dati 2004/01/2010

Modifiche degli schemi

ALTER DOMAINALTER TABLEDROP DOMAINDROP TABLE...

Page 11: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

11

SQL, Definizione e interrogazione di basi di dati 2104/01/2010

Definizione degli indici

è rilevante dal punto di vista delle prestazionima è a livello fisico e non logicoin passato era importante perché in alcuni sistemi era l'unico mezzo per definire chiaviCREATE INDEX

SQL, Definizione e interrogazione di basi di dati 2204/01/2010

SQL, operazioni sui dati

interrogazione: SELECT

modifica:INSERT, DELETE, UPDATE

Page 12: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

12

SQL, Definizione e interrogazione di basi di dati 2304/01/2010

Istruzione SELECT per l’interrogazione

SELECT ListaAttributiFROM ListaTabelle[ WHERE Condizione ]

"target list"clausola FROMclausola WHERE

SQL, Definizione e interrogazione di basi di dati 2404/01/2010

Capacità del comando SELECT

SelezioneSelezione ProiezioneProiezione

TabellaTabella 11 TabellaTabella 22

TabellaTabella 11 TabellaTabella 11JoinJoin

Page 13: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

13

SQL, Definizione e interrogazione di basi di dati 2504/01/2010

SELECT

SELECT ListaAttributiFROM ListaTabelle[ WHERE Condizione ]La query1. considera il prodotto cartesiano tra le tabelle in ListaTabelle2. fra queste seleziona solo le righe che soddisfano la Condizione3. e infine valuta le espressioni specificate nella target list

ListaAttributiLa SELECT implementa gli operatori RidenominazioneProiezione, Selezione e Join dell’algebra relazionale

Piu’ altro che vedremo piu’ avanti

SQL, Definizione e interrogazione di basi di dati 2604/01/2010

Convenzione scrittura comandi SQL

I comandi SQL non sono “case sensitive”Possono essere distribuiti in una o più righe terminate da un separatoreClausole diverse sono usualmente inserite in linee separatePer convenzione si usa scrivere i costrutti SQL in maiuscolo

SELECT Professore, Corsi.CorsoFROM Corsi, Esami, Studenti

WHERE Corsi.Corso = Esami.CorsoAND Esami.Matricola = Studenti.MatricolaAND Nome=‘Teo Verdi’AND Voto > 24

Page 14: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

14

SQL, Definizione e interrogazione di basi di dati 2704/01/2010

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

Database di esempio

SQL, Definizione e interrogazione di basi di dati 2804/01/2010

Esempio query

Nome e reddito delle persone con meno di trenta anni

πNome, Reddito(σEta<30(Persone))

SELECT nome, redditoFROM personeWHERE eta < 30

30Filippo15Aldo21AndreaRedditoNome

Page 15: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

15

SQL, Definizione e interrogazione di basi di dati 2904/01/2010

Espressioni aritmetiche nella target list

Creare espressioni attraverso l’uso dei soliti operatori aritmetici: +, -, *, /Le priorita’ sono quelle standardPossono essere alterate con l’uso delle parentesi

SQL, Definizione e interrogazione di basi di dati 3004/01/2010

Uso degli operatori AritmeticiSQL> SELECT ename, sal, sal+300

2 FROM emp;

ENAME SAL exp---------- --------- ---------KING 5000 5300BLAKE 2850 3150CLARK 2450 2750JONES 2975 3275MARTIN 1250 1550ALLEN 1600 1900...14 rows selected.

Page 16: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

16

SQL, Definizione e interrogazione di basi di dati 3104/01/2010

Precedenza operatori aritmeticiSQL> SELECT ename, sal, 12*sal+100

2 FROM emp;

ENAME SAL exp---------- --------- ----------KING 5000 60100BLAKE 2850 34300CLARK 2450 29500JONES 2975 35800MARTIN 1250 15100ALLEN 1600 19300...14 rows selected.

SQL, Definizione e interrogazione di basi di dati 3204/01/2010

Uso delle parentesiSQL> SELECT ename, sal, 12*(sal+100)

2 FROM emp;

ENAME SAL exp---------- --------- -----------KING 5000 61200BLAKE 2850 35400CLARK 2450 30600JONES 2975 36900MARTIN 1250 16200...14 rows selected.

Page 17: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

17

SQL, Definizione e interrogazione di basi di dati 3304/01/2010

Alias delle colonne

Ridenominare il nome di una colonnaImplementa l’operatore (Ridenominazione) dell’algebra relazionale

L’alias deve seguire immediatamente il nome di una colonna (SENZA VIRGOLA)

può essere usata opzionalmente la parola chiave AS tra il nome della colonna e l’alias

Richiede doppio apice se l’alias ha degli spazi

SQL, Definizione e interrogazione di basi di dati 3404/01/2010

Uso dell’AliasSQL> SELECT ename AS name, sal salary

2 FROM emp;

NAME SALARY

------------- ---------

...

SQL> SELECT ename "Name",2 sal*12 "Annual Salary"3 FROM emp;

Name Annual Salary

------------- -------------

...

Page 18: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

18

SQL, Definizione e interrogazione di basi di dati 3504/01/2010

Proiezione, senza selezioneNome e reddito di tutte le persone

πNome, Reddito(Persone)

SELECT nome, redditoFROM persone

SQL, Definizione e interrogazione di basi di dati 3604/01/2010

Selezione, senza proiezione

Uso dello `*` nella target listNome, età e reddito delle persone con meno ditrenta anni

σEta<30(Persone)

SELECT *FROM personeWHERE eta < 30

Page 19: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

19

SQL, Definizione e interrogazione di basi di dati 3704/01/2010

Limitare le righe selezionate tramite WHERE

Corrisponde all’operatore (Restrizione) dell’algebra relazionale

La clausola WHERE segue la clausola FROME’ opzionale

SELECT [DISTINCT] {*| colonna [alias], ...}FROM tabella[WHERE condizione(i)];

SQL, Definizione e interrogazione di basi di dati 3804/01/2010

Uso della clausola WHERESQL> SELECT ename, job, deptno

2 FROM emp3 WHERE job='CLERK';

ENAME JOB DEPTNO---------- --------- ---------JAMES CLERK 30SMITH CLERK 20ADAMS CLERK 20MILLER CLERK 10

Page 20: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

20

SQL, Definizione e interrogazione di basi di dati 3904/01/2010

Stringhe di caratteri e Date

Stringhe di caratteri e date vanno incluse tra apici.I caratteri sono case sensitive e le date sono format sensitiveSQL> SELECT ename, job, deptno

2 FROM emp3 WHERE ename = 'JAMES';

SQL, Definizione e interrogazione di basi di dati 4004/01/2010

Condizione di WHERE

Condizione : :=Predicato |“(“Condizione”)” |NOT Condizione |Condizione (AND | OR) Condizione

PredicatoEspr op (Espr | “(“ Sottoselect “)” )op ∈ {=, <>, >, >=, <, <=}SottoSelect deve dare come risultato una tabella con un solo elemento o vuota (vedremo alcuni esempi)

Page 21: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

21

SQL, Definizione e interrogazione di basi di dati 4104/01/2010

Uso degli Operatori di Confronto

SQL> SELECT ename, sal, comm2 FROM emp3 WHERE sal<=comm;

ENAME SAL COMM---------- --------- ---------MARTIN 1250 1400

SQL, Definizione e interrogazione di basi di dati 4204/01/2010

Altri Operatori di Confronto

Operatore

BETWEEN...AND...

IN(list)

LIKE

IS NULL

Significato

compreso tra due valori

Corrisp. ad uno dei valori nella lista

Operatore di pattern matching

Valore nullo

Page 22: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

22

SQL, Definizione e interrogazione di basi di dati 4304/01/2010

Uso dell’operatore BETWEEN

ENAME SAL---------- ---------MARTIN 1250TURNER 1500WARD 1250ADAMS 1100MILLER 1300

SQL> SELECT ename, sal2 FROM emp3 WHERE sal BETWEEN 1000 AND 1500;

Limiteinferiore

Limitesuperiore

BETWEEN consente la selezione di righe con attributi in un particolare range

SQL, Definizione e interrogazione di basi di dati 4404/01/2010

Predicato BETWEEN

Espr1 [NOT] BETWEEN Espr2 AND Espr3

Equivale a [NOT] Espr2 ≤Espr1 AND Espr1≤Espr3

Page 23: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

23

SQL, Definizione e interrogazione di basi di dati 4504/01/2010

Uso dell’operatore IN E’ usato per selezionare righe che hanno un attributo che assume valori contenuti in una lista.

SQL> SELECT empno, ename, sal, mgr2 FROM emp3 WHERE mgr IN (7902, 7566, 7788);

EMPNO ENAME SAL MGR--------- ---------- --------- ---------

7902 FORD 3000 75667369 SMITH 800 79027788 SCOTT 3000 75667876 ADAMS 1100 7788

SQL, Definizione e interrogazione di basi di dati 4604/01/2010

Uso dell’operatore LIKE• LIKE è usato per effettuare ricerche wildcard

di una stringa di valori.• Le condizioni di ricerca possono contenere

sia letterali, caratteri o numeri.– % denota zero o più caratteri.– _ denota un carattere.

SQL> SELECT ename2 FROM emp3 WHERE ename LIKE 'S%';

Page 24: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

24

SQL, Definizione e interrogazione di basi di dati 4704/01/2010

Uso dell’operatore LIKEIl pattern-matching di caratteri può essere

combinato

I’identificatore ESCAPE (\) deve essere usato per cercare "%" o "_".

SQL> SELECT ename2 FROM emp3 WHERE ename LIKE '_A%';

ENAME----------MARTINJAMES WARD

SQL, Definizione e interrogazione di basi di dati 4804/01/2010

Cognome Filiale EtàMatricola

Neri Milano 455998Rossi Roma 327309

Bruni Milano NULL9553

Impiegati

Neri Milano 455998Bruni Milano NULL9553

σ Età > 40 OR Età IS NULL (Impiegati)

Neri Milano 455998Bruni Milano NULL9553

Gestione dei valori nulli

Page 25: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

25

SQL, Definizione e interrogazione di basi di dati 4904/01/2010

Gli impiegati la cui età è o potrebbe essere maggiore di 40

σ Età > 40 OR Età IS NULL (Impiegati)

SELECT *FROM impiegatiWHERE eta > 40 OR eta is null

SQL, Definizione e interrogazione di basi di dati 5004/01/2010

SQL e algebra relazionale

R1(A1,A2) R2(A3,A4)

SELECT R1.A1, R2.A4 FROM R1, R2WHERE R1.A2 = R2.A3

prodotto cartesiano (FROM)selezione (WHERE)proiezione (SELECT)

Page 26: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

26

SQL, Definizione e interrogazione di basi di dati 5104/01/2010

SQL e algebra relazionale

R1(A1,A2) R2(A3,A4)

SELECT R1.A1, R2.A4 FROM R1, R2WHERE R1.A2 = R2.A3

πA1,A4 (σA2=A3 (R1 JOIN R2))

SQL, Definizione e interrogazione di basi di dati 5204/01/2010

possono essere necessarie ridenominazioni

nel prodotto cartesianonella target list

SELECT X.A1 AS B1, ...FROM R1 X, R2 Y, R1 ZWHERE X.A2 = Y.A3 AND ...

Page 27: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

27

SQL, Definizione e interrogazione di basi di dati 5304/01/2010

SELECT X.A1 AS B1, Y.A4 AS B2FROM R1 X, R2 Y, R1 ZWHERE X.A2 = Y.A3 AND Y.A4 = Z.A1

δ B1,B2←A1,A4 (π A1,A4 (σ A2 = A3 AND A4 = C1(

R1 JOIN R2 JOIN δ C1,C2 ← A1,A2 (R1))))

Self JOIN su R1

SQL, Definizione e interrogazione di basi di dati 5404/01/2010

Cognome Filiale StipendioMatricola

Neri Milano 645998Neri Napoli 557309

Rossi Roma 645698Rossi Roma 449553

cognome e filiale di tutti gli impiegati

π Cognome, Filiale (Impiegati)

Page 28: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

28

SQL, Definizione e interrogazione di basi di dati 5504/01/2010

Cognome Filiale

Neri MilanoNeri Napoli

Rossi Roma

Cognome Filiale

Neri MilanoNeri Napoli

Rossi RomaRossi Roma

SELECTcognome, filiale

FROM impiegati

SELECT distinctcognome, filiale

FROM impiegati

SQL, Definizione e interrogazione di basi di dati 5604/01/2010

Nome Età

Persone

Reddito

Andrea 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 29: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

29

SQL, Definizione e interrogazione di basi di dati 5704/01/2010

Selezione, proiezione e joinI padri di persone che guadagnano più di 20

πPadre(paternita JOIN Figlio=Nome (σReddito>20 (persone)))SELECT distinct padreFROM persone, paternitaWHERE figlio = nome AND

reddito > 20

SQL, Definizione e interrogazione di basi di dati 5804/01/2010

Join naturale

Padre e madre di ogni persona

paternita JOIN maternita

SELECT paternita.figlio,padre, madreFROM maternita, paternitaWHERE paternita.figlio = maternita.figlio

Page 30: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

30

SQL, Definizione e interrogazione di basi di dati 5904/01/2010

Le persone che guadagnano più dei rispettivi padri;mostrare nome, reddito e reddito del padre

πNome, Reddito, RP (σReddito>RP(δNP,EP,RP Nome,Eta,Reddito(persone)

JOIN NP=Padre(paternita JOINFiglio =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

Necessita’ di ridenominazione

SQL, Definizione e interrogazione di basi di dati 6004/01/2010

SELECT, con ridenominazionedel 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

SELECT x.figlio, f.reddito AS reddito, p.reddito AS redditoPadre

FROM persone p, paternita x, persone fWHERE p.nome = x.padre AND x.figlio = f.nome

AND f.reddito > p.reddito

O meglio

Page 31: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

31

SQL, Definizione e interrogazione di basi di dati 6104/01/2010

Join esplicito (JOIN-ON)Sintassi:

SELECT …FROM Tabella { … JOIN Tabella ON CondDiJoin }, …[ WHERE AltraCondizione ]

Esempio: padre e madre di ogni persona (le due versioni):

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

SQL, Definizione e interrogazione di basi di dati 6204/01/2010

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.nomeWHERE f.reddito > p.reddito

Page 32: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

32

SQL, Definizione e interrogazione di basi di dati 6304/01/2010

Ulteriore estensione: join naturale(meno diffuso)

πFiglio,Padre,Madre(paternita JOIN Figlio = Nome δ Nome=Figlio(maternita))

paternita JOIN maternita

SELECT madre, paternita.figlio, padre FROM maternita JOIN paternita ON

paternita.figlio = maternita.figlio

SELECT madre, paternita.figlio, padre FROM maternita natural JOIN paternita

SQL, Definizione e interrogazione di basi di dati 6404/01/2010

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 33: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

33

SQL, Definizione e interrogazione di basi di dati 6504/01/2010

Outer joinSELECT paternita.figlio, padre, madreFROM maternita JOIN paternita

ON maternita.figlio = paternita.figlio

SELECT paternita.figlio, padre, madreFROM maternita LEFT OUTER JOIN paternita

ON maternita.figlio = paternita.figlio

SELECT paternita.figlio, padre, madreFROM maternita FULL OUTER JOIN paternita

ON maternita.figlio = paternita.figlio

SQL, Definizione e interrogazione di basi di dati 6604/01/2010

Ordinamento del risultatoNome e reddito delle persone con meno ditrenta anni in ordine alfabetico

SELECT nome, redditoFROM personeWHERE eta < 30ORDER BY nome

Page 34: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

34

SQL, Definizione e interrogazione di basi di dati 6704/01/2010

PersoneNome Reddito

Andrea 21Aldo 15

Filippo 30

PersoneNome Reddito

Andrea 21Aldo 15

Filippo 30

SELECT nome, redditoFROM personeWHERE eta < 30

SELECT nome, redditoFROM personeWHERE eta < 30ORDER BY nome

SQL, Definizione e interrogazione di basi di dati 6804/01/2010

Operatori aggregati

Nelle espressioni della target list possiamoavere anche espressioni che calcolano valori a partire da insiemi di ennupleSQL-2 prevede 5 possibili operatori di aggregamento:

conteggio, minimo, massimo, media, sommaGli operatori di aggregamento NON sono rappresentabili in Algebra Relazionale

Page 35: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

35

SQL, Definizione e interrogazione di basi di dati 6904/01/2010

Operatori aggregati: COUNT

• COUNT restituisce il numero di righe o il numero di valori distinti di un particolare attributo

• Esempio: Il numero di figli di Franco:• SELECT count(*) as NumFigliDiFranco

FROM PaternitaWHERE Padre = 'Franco'

l’operatore aggregato (count) viene applicato al risultato dell’interrogazione:

SELECT * FROM PaternitaWHERE Padre = 'Franco'

SQL, Definizione e interrogazione di basi di dati 7004/01/2010

PadrePaternità Figlio

LuigiLuigi

SergioOlga

FilippoFrancoFranco

AndreaAldo

Franco

FrancoFranco

AndreaAldo

NumFigliDiFranco2

Page 36: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

36

SQL, Definizione e interrogazione di basi di dati 7104/01/2010

COUNT e valori nulliNumero di tuple

SELECT count(*) FROM personeNumero di volte il campo ‘reddito’ non e’ NULL

SELECT count(reddito) FROM personeNumero di valori distinti del campo ‘reddito’ (senza i NULL)

SELECT count(distinct reddito) FROM persone

Nome EtàPersone RedditoAndrea 27

Maria 55Anna 50

Aldo 2521

2135

NULL

SQL, Definizione e interrogazione di basi di dati 7204/01/2010

Altri operatori aggregati

SUM, AVG, MAX, MINMedia dei redditi di coloro che hanno meno di 30 anni:SELECT avg(reddito) FROM persone WHERE eta < 30

Uso del JOIN: media dei redditi dei figli di Franco:SELECT avg(reddito) FROM persone JOIN paternita ON nome=figlio WHERE padre='Franco‘

Uso di piu’ operatori di aggregamento nella target list:SELECT avg(reddito), min(reddito), max(reddito) FROM persone WHERE eta < 30

Page 37: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

37

SQL, Definizione e interrogazione di basi di dati 7304/01/2010

Operatori aggregati e valori nulli

SELECT avg(reddito) AS redditomedioFROM persone

Nome EtàPersone RedditoAndrea 27

Maria 55Anna 50

Aldo 2530

3636

NULL

SQL, Definizione e interrogazione di basi di dati 7404/01/2010

Operatori aggregati e target listun’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: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

38

SQL, Definizione e interrogazione di basi di dati 7504/01/2010

Le funzioni possono essere applicate a partizioni delle relazioniClausola GROUP BY

Syntax: GROUP BY listaAttributiIl numero di figli di ciascun padreSELECT padre, count(*) AS NumFigliFROM paternitaGROUP BY Padre

Operatori aggregati e raggruppamenti

Padrepaternita Figlio

LuigiLuigi

SergioOlga

FilippoFrancoFranco

AndreaAldo

Franco Padre NumFigli

LuigiSergio

2Franco 2

1

SQL, Definizione e interrogazione di basi di dati 7604/01/2010

Esempio GROUP BY

Per ogni dipartimento, restituire la somma degli stipendidi tutti gli impiegati (di quel dipartimento)Relazione: Employee(Name,Dept,Office,Salary,City)

Page 39: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

39

SQL, Definizione e interrogazione di basi di dati 7704/01/2010

Semantica degli operatori di raggruppamento (1)

La query e’ innanzitutto eseguita senza operatori aggregati e senza GROUP BY:

SQL, Definizione e interrogazione di basi di dati 7804/01/2010

Semantica degli operatori di raggruppamento (2)

Quindi il risultato e’ diviso in sottoinsiemi aventi gli stessi valori per gli attributi indicati nel GROUP BY (Dept nel nostro caso)Quindi l’operatore di aggregamento e’ calcolato su ogni sottoinsieme:

Page 40: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

40

SQL, Definizione e interrogazione di basi di dati 7904/01/2010

Raggruppamenti e target listscorretta

SELECT padre, avg(f.reddito), p.redditoFROM persone f JOIN paternita ON figlio = nome

JOIN persone p ON padre =p.nomeGROUP BY padre

correttaSELECT padre, avg(f.reddito)

FROM persone f JOIN paternita ON figlio = nome JOINpersone p ON padre =p.nome

GROUP BY padre

SQL, Definizione e interrogazione di basi di dati 8004/01/2010

Condizioni sui gruppi, clausola HAVING

Si possono applicare condizioni sul valore aggregato per ogni gruppoEsempio: I dipartimenti la cui somma dei salari e’maggiore di 100

Page 41: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

41

SQL, Definizione e interrogazione di basi di dati 8104/01/2010

WHERE o HAVING?

I padri i cui figli sotto i 30 anni hanno un reddito medio maggiore di 25:

SELECT padre, avg(f.reddito)FROM persone f JOIN paternita ON figlio = nomeWHERE eta < 30 GROUP BY padre HAVING avg(f.reddito) > 25

SQL, Definizione e interrogazione di basi di dati 8204/01/2010

Sintassi, riassumiamo

SelectSQL ::= select ListaAttributiOEspressionifrom ListaTabelle[ where CondizioniSemplici ][ group by ListaAttributiDiRaggruppamento ][ having CondizioniAggregate ][ order by ListaAttributiDiOrdinamento ]

Page 42: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

42

SQL, Definizione e interrogazione di basi di dati 8304/01/2010

Unione, intersezione e differenza

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

SELECT …UNION [all]SELECT ...

i duplicati vengono eliminati (a meno che si usi all)anche dalle proiezioni!

SQL, Definizione e interrogazione di basi di dati 8404/01/2010

Notazione posizionale!SELECT padre FROM paternitaUNIONSELECT madreFROM maternita

quali nomi per gli attributi del risultato?nessuno quelli del primo operando…

Page 43: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

43

SQL, Definizione e interrogazione di basi di dati 8504/01/2010

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

SQL, Definizione e interrogazione di basi di dati 8604/01/2010

Notazione posizionale, 2

SELECT padre, figlioFROM paternitaUNIONSELECT figlio, madreFROM maternita

SELECT padre, figlioFROM paternitaUNIONSELECT madre, figlioFROM maternita

Page 44: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

44

SQL, Definizione e interrogazione di basi di dati 8704/01/2010

Notazione posizionale, 3Anche 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

SQL, Definizione e interrogazione di basi di dati 8804/01/2010

Differenza

SELECT NomeFROM ImpiegatoEXCEPTSELECT Cognome as NomeFROM Impiegato

vedremo che si può esprimere con SELECT nidificate

Page 45: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

45

SQL, Definizione e interrogazione di basi di dati 8904/01/2010

IntersezioneSELECT NomeFROM ImpiegatoINTERSECTSELECT Cognome as NomeFROM Impiegato

equivale a

SELECT I.NomeFROM Impiegato I, Impiegato JWHERE I.Nome = J.Cognome

SQL, Definizione e interrogazione di basi di dati 9004/01/2010

Interrogazioni nidificate

le condizioni in SQL permettono anche il confronto fra un attributo e il risultato di una sottoquery

Syntax:Scalare Operatore (ANY | ALL) SelectQueryANY: il predicato e’ vero se almeno uno dei valori restituiti da Querysoddisfano la condizioneALL: il predicato e’ vero se tutti i valori restituiti dalla Querysoddisfano la condizione

quantificatore esistenzialeEXISTS SelectQueryIl predicato e’ vero se la SelectQuery restituisce almeno una tupla

Page 46: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

46

SQL, Definizione e interrogazione di basi di dati 9104/01/2010

Esempio di SELECT nidificatenome e reddito del padre di Franco

SELECT Nome, RedditoFROM Persone, PaternitaWHERE Nome = Padre AND Figlio = 'Franco'

SELECT Nome, RedditoFROM PersoneWHERE Nome = ( SELECT Padre

FROM PaternitaWHERE Figlio = 'Franco')

La query nella clausola WHERE e’ la query nidificata

SQL, Definizione e interrogazione di basi di dati 9204/01/2010

Interrogazioni nidificate, commenti

La forma nidificata è “meno dichiarativa”, ma talvolta più leggibile (richiede meno variabili)La forma piana e quella nidificata possono essere combinateLe sottointerrogazioni non possono contenere operatori insiemistici (“l’unione si fa solo al livello esterno”); la limitazione non è significativa

Page 47: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

47

SQL, Definizione e interrogazione di basi di dati 9304/01/2010

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

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))

SQL, Definizione e interrogazione di basi di dati 9404/01/2010

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

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 48: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

48

SQL, Definizione e interrogazione di basi di dati 9504/01/2010

Negazione con le query nidificate

Trovare quei dipartimenti dove non c’e’ nessuno che sichiama ‘Brown’:

Oppure:

SQL, Definizione e interrogazione di basi di dati 9604/01/2010

Operatori IN e NOT IN

IN e’ sinonimo di: =ANY

NOT IN e’ sinonimo di: <>ALL

Page 49: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

49

SQL, Definizione e interrogazione di basi di dati 9704/01/2010

MAX e MIN con le query nidificate

Esempio: Il dipartimento(i) dove lavora coluicon lo stipendio piu’ alto di tutta l’azienda:

Oppure:

SQL, Definizione e interrogazione di basi di dati 9804/01/2010

Interrogazioni nidificate, commenti, 2

La prima versione di SQL prevedeva solo la forma nidificata (o strutturata), con una sola relazione in ogni clausola FROM. Il che è insoddisfacente:

la dichiaratività è limitatanon si possono includere nella target list attributi di relazioni nei blocchi interni

Page 50: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

50

SQL, Definizione e interrogazione di basi di dati 9904/01/2010

Nome e reddito dei padri di persone che guadagnano piùdi 20 milioni, 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))

SQL, Definizione e interrogazione di basi di dati 10004/01/2010

Interrogazioni nidificate, commenti, 3regole di visibilità:

non è possibile fare riferimenti a variabili definite in blocchi più internise un nome di variabile è omesso, si assume riferimento alla variabile più “vicina”

in un blocco si può fare riferimento a variabili definite in blocchi più esterni

Page 51: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

51

SQL, Definizione e interrogazione di basi di dati 10104/01/2010

Quantificazione esistenziale

Ulteriore tipo di condizioneEXISTS ( Sottoespressione )

Le persone che hanno almeno un figlio

SELECT *FROM PersoneWHERE EXISTS ( SELECT *

FROM PaternitaWHERE Padre = Nome) OR

EXISTS ( SELECT *FROM MaternitaWHERE Madre = Nome)

SQL, Definizione e interrogazione di basi di dati 10204/01/2010

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

SELECT distinct PadreFROM Paternita ZWHERE NOT EXISTS (

SELECT *FROM Paternita W, PersoneWHERE W.Padre = Z.Padre

AND W.Figlio = Nome AND Reddito <= 20)

Quantificazione esistenziale, 2

Page 52: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

52

SQL, Definizione e interrogazione di basi di dati 10304/01/2010

Semantica delle espressioni “correlate”

La query piu’ interna puo’ usare variabili della queryesternaL’interrogazione interna viene eseguita una volta per ciascuna ennupla dell’interrogazione esternaEsempio, trovare tutti gli studenti che hanno un omonimo:

SELECT *FROM Student SWHERE EXISTS (SELECT *

FROM Student S2WHERE S2.Nome = S.NomeAND S2.Cognome = S.CognomeAND S2.Matricola <> S.Matricola)

SQL, Definizione e interrogazione di basi di dati 10404/01/2010

Semantica delle espressioni “correlate”, 2

Esempio, trovare tutti gli studenti che NON hanno un omonimo:

SELECT *FROM Student SWHERE NOT EXISTS (SELECT *

FROM Student S2WHERE S2.Nome = S.NomeAND S2.Cognome = S.CognomeAND S2.Matricola <> S.Matricola)

Page 53: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

53

SQL, Definizione e interrogazione di basi di dati 10504/01/2010

Confronto su piu’ attributiIl confronto con il risultato di una query nidificata puo’essere basato su piu’ attributiStessa query di prima, trovare tutti gli studenti che hanno un omonimo:

SELECT *FROM Student SWHERE (Nome, Cognome) IN (SELECT Nome, Cognome

FROM Student S2WHERE S2.Matricola <> S.Matricola)

SQL, Definizione e interrogazione di basi di dati 10604/01/2010

Visibilità

scorretta:SELECT *FROM ImpiegatoWHERE Dipart in (SELECT Nome

FROM Dipartimento D1WHERE Nome = 'Produzione') OR

Dipart in (SELECT NomeFROM Dipartimento D2WHERE D2.Citta = D1.Citta)

D1 non e’ visibile nella seconda query nidificata in quanto le due sottoquery sono allo stesso livello

Page 54: 18-SQL Definizione e interrogazione 06 - sara.unisalento.itsara.unisalento.it/~mirto/beniculturali/page3/files/18-SQL... · SQL, Definizione e interrogazione di basi di dati Capitolo

54

SQL, Definizione e interrogazione di basi di dati 10704/01/2010

Commenti finali sulle query nidificate

Query nidificate possono essere “meno dichiarative” in un certo senso ma spesso sono piu’ facilmenteinterpretabili

Suddivisibili in blocchi piu’ semplici da interpretareL’utilizzo di variabili deve rispettare le regole di visibilita’

Cioe’, una variabile puo’ essere usata solo all’interno dellostesso blocco e in un blocco piu’ interno

Comunque, query nidificate complesse possono esseredi difficile comprensione

Soprattutto quando si usano molte variabili comuni tra blocchidiversi