La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

SQL Interrogazioni. 2 Interrogazioni in SQL Non esiste un SQL standard (vari dialetti) Formulazione di interrogazioni (query) è parte del Data Manipulation.

Presentazioni simili


Presentazione sul tema: "SQL Interrogazioni. 2 Interrogazioni in SQL Non esiste un SQL standard (vari dialetti) Formulazione di interrogazioni (query) è parte del Data Manipulation."— Transcript della presentazione:

1 SQL Interrogazioni

2 2 Interrogazioni in SQL Non esiste un SQL standard (vari dialetti) Formulazione di interrogazioni (query) è parte del Data Manipulation Language, DML Anche usato nel Data Declaration Language, DDL (per esempio, per dichiarare vincoli di integrità)

3 3 Interrogazioni in SQL Paradigma dichiarativo: si specifica la descrizione dell’obiettivo e non il modo con cui ottenerlo A differenza dell’algebra relazionale, che è procedurale

4 4 Cenni sull’implementazione Interrogazione in SQL viene tradotta in linguaggio procedurale Sulla traduzione si fanno ottimizzazioni algebriche (ecco a cosa serve l’algebra…) … … e non (queste ultime dipendono dalle strutture sottostanti al DBMS in questione)

5 5 Sintassi Esistono, in generale, più modi per effettuare un’interrogazione: scelte basate sulla leggibilità (più che sull’efficienza…) Struttura essenziale (introdurremo le variazioni di volta in volta): select ListaAttributi (target list) from ListaTabelle (clausola “from”) [ where Condizione] (clausola “where”)

6 6 Notazione Le parentesi angolari : permettono di isolare un termine della sintassi Le parentesi quadre [,]: indicano che il termine all’interno è opzionale Può non comparire o comparire una sola volta

7 7 Notazione Le parentesi graffe {,}: indicano che il termine racchiuso può non comparire o essere ripetuto un numero arbitrario di volte Le barre verticali |: indicano che deve essere scelto uno tra i termini separati dalle barre

8 8 Significato dell’interrogazione Si considera il prodotto cartesiano fra le tabelle della clausola “from” Si selezionano quelle tuple che soddisfano la condizione della clausola “where” (opzionale) Si danno in ouput i valori di quegli attributi che sono elencati nella target list (“select”)

9 9 Tabella “Impiegato” NomeCognomeDipartUfficioStipendioCittà MarioRossiAmministr1015Milano CarloBianchiProd2012Torino GiuseppeVerdiAmministr2013Roma FrancoNeriDistrib1615Napoli CarloRossiDirezione1427Milano LorenzoLanziDirezione721Genova PaolaBurroniAmmistr7513Venezia MarcoFrancoProd2014Roma Impiegato

10 10 Interrogazione 1 select Stipendio as Salario from Impiegato where Cognome = ‘Rossi’ Salario 15 27

11 11 Interrogazione 1 select Stipendio as Salario from Impiegato where Cognome = ‘Rossi’ Salario alia s

12 12 Interrogazione 2 select * from Impiegato where Cognome = ‘Rossi’ NomeCognomeDipartUfficioStipendioCittà MarioRossiAmministr1015Milan o CarloRossiDirezione1427Milan o

13 13 Interrogazione 2 select * from Impiegato where Cognome = ‘Rossi’ tutti NomeCognomeDipartUfficioStipendioCittà MarioRossiAmministr1015Milan o CarloRossiDirezione1427Milan o

14 14 Interrogazione 3 select Stipendio/12 as StipMens from Impiegato where Cognome = ‘Bianchi’ StipMens 1

15 15 Interrogazione 3 select Stipendio/12 as StipMens from Impiegato where Cognome = ‘Bianchi’ espressioni StipMens 1

16 16 Join in SQL (primo modo) Per formulare interrogazioni che coinvolgono più tabelle occorre fare un join In SQL un modo è: elencare le tabelle di interesse nella “from” mettere nella “where” le condizioni necessarie per mettere in relazione fra loro gli attributi di interesse

17 17 Tabella “Dipartimento” NomeIndirizzoCittà AmministrVia Tito Livio 27 Milano ProdP.le Lavater 3Torino DistribVia Segre 9Roma DirezioneVia Tito Livio 27 Milano RicercaVia Morone 6Milano Dipartimento

18 18 Interrogazione 4 Restituire nome e cognome degli impiegati e delle città in cui lavorano select Impiegato.Nome,Cognome, Dipartimento.Città from Impiegato,Dipartimento where Dipart = Dipartimento.Nome

19 19 Interrogazione 4 Restituire nome e cognome degli impiegati e delle città in cui lavorano select Impiegato.Nome,Cognome, Dipartimento.Città from Impiegato,Dipartimento where Dipart = Dipartimento.Nome La notazione punto ( ) serve per disambiguare Suggerimento: “from”, “where”, target list

20 20 Risultato interrogazione 4 Impiegato.NomeCognomeDipartimento.Città MarioRossiMilano CarloBianchiTorino GiuseppeVerdiMilano FrancoNeriRoma CarloRossiMilano LorenzoLanziMilano PaolaBurroniMilano MarcoFrancoTorino

21 21 Interrogazione 5 select I.Nome, Cognome, D.Città from Impiegato [as] I, Dipartimento [as] D where Dipart = D.Nome Impiegato [as] I : esempio di aliasing di una tabella L’aliasing per le tabelle serve a abbreviare e disambiguare i riferimenti alle tabelle

22 22 Sulla clausola “where” Ammette come argomento un’espressione booleana Predicati semplici combinati con not, and, or ( not ha la precedenza, consigliato l’uso di parantesi (, ) ) Ciascun predicato usa operatori: =, <>,, = Confronto tra valori di attributi, costanti, espressioni

23 23 Interrogazione 6 select Nome,Cognome from Impiegato where Ufficio = 20 and Dipart =‘Amministr’ NomeCognome GiuseppeVerdi

24 24 Interrogazione 7 e 8 select Nome, Cognome from Impiegato where Dipart=‘Prod’ or Dipart=‘Amministr’ select Nome, Cognome from Impiegato where Cognome=‘Rossi’ and (Dipart=‘Prod’ or Dipart=‘Amministr’) Nome Mario 2 NomeCognome MarioRossi CarloBianchi PaolaBurroni MarcoFranco GiuseppeVerdi

25 25 Operatore like _ = carattere arbitrario % = stringa di lunghezza arbitraria (anche 0) di caratteri arbitrari Esempi: like ab%ba_ = tutte le stringhe che cominciano con “ab” e che hanno “ba” come coppia di caratteri prima dell’ultima posizione (es. abjjhhdhdbak,abbap)

26 26 Interrogazione 9 select * from Impiegato where Cognome like ‘_o%i’ or Cognome like ‘_u%i’ NomeCognomeDipartUfficioStipendioCittà MarioRossiAmministr1045Milano CarloRossiDirezioni1480Milano PaolaBurroniAmministr7540Venezia

27 27 Gestione dei valori nulli Attributo con valore nullo = non applicabile a una certa tupla, o valore sconosciuto, o non si sa nulla SQL offre il predicato “is null”: Attributo is [not] null

28 28 Gestione dei valori nulli Stipendio>13 : cosa succede se l’attributo Stipendio è nullo? Scelte: Logica a 2 valori e controllo esplicito. Per esempio: (Stipendio > 13) or (Stipendio <= 13) or (Stipendio is null) Usare un terzo valore di verità unknown: soluzione che crea problemi nei casi complessi (valutazione “globale” delle formule logiche)

29 29 Uso delle variabili di alias Non solo per disambiguare la notazione Ci sono casi in cui una stessa tabella serve più di una volta Caso speciale: quando si deve confrontare una tabella con se stessa (il modello relazionale è relation- oriented, non tuple-oriented )

30 30 Interrogazione 10 Estrarre nome e cognome degli impiegati che hanno lo stesso cognome (ma nome diverso) di impiegati che lavorano nel dipartimento Produzione

31 31 Interrogazione 10 Estrarre nome e cognome degli impiegati che hanno lo stesso cognome (ma nome diverso) di impiegati che lavorano nel dipartimento Produzione select I1.Cognome, I1.Nome from Impiegato I1, Impiegato I2 where I1.Cognome = I2.Cognome and I1.Nome <> I2.Nome and I2.Dipart = ‘Prod’

32 32 Interrogazione 10 Estrarre nome e cognome degli impiegati che hanno lo stesso cognome (ma nome diverso) di impiegati che lavorano nel dipartimento Produzione select I1.Cognome, I1.Nome from Impiegato I1, Impiegato I2 where I1.Cognome = I2.Cognome and I1.Nome <> I2.Nome and I2.Dipart = ‘Prod’ per evitare output di tupla con se stessa I2 usata per trovare tuple assoc. a ‘Prod’

33 33 Interrogazione 11 Estrarre il nome e lo stipendio dei capi degli impiegati che guadagnano più dei loro capi, date: Impiegati(Matricola, Nome, Età, Stipendio) Supervisione(Capo, Impiegato) dove Capo e Impiegato sono chiavi esterne di Impiegati (e.g., sono dei numeri di matricola)

34 34 Interrogazione 11 (sol.) select I1.Nome, I1.Stipendio from Impiegato I1, Impiegato I2, Supervisione where I1.Matricola = Capo and I2.Matricola = Impiegato and I2.Stipendio > I1.Stipendio

35 35 Interrogazione 11 (sol.) select I1.Nome, I1.Stipendio from Impiegato I1, Impiegato I2, Supervisione where I1.Matricola = Capo and I2.Matricola = Impiegato and I2.Stipendio > I1.Stipendio I1 per i capi, I2 per gli impiegati

36 36 Interpretazione algebrica delle interrogazioni SQL select T1.Attrib_11,…,Th.Attrib_hm from Tabella1 as T1,…,Tabellan as Tn where condizione  T1.Attrib_11,…,Th.Attrib_hm (  condizione (Tabella1 x … x Tabellan)) Per semplicità, omettiamo le ridenominazioni che ci permettono di considerare tutti i join come prodotto cartesiano

37 37 Algebra->calcolo, SQL->linguaggio SQL gestisce i duplicati ( select e select distinct ), algebra no (basata su insiemi) select * from Impiegati ordered by [asc|desc] Matricola Operatori aggregati Interrogazioni nidificate per ordinare le tuple

38 38 Operatori aggregati Algebra relazionale: tutte le condizioni sono valutate su una tupla alla volta, in modo indipendente SQL offre degli operatori che lavorano su più di una tupla alla volta: count,sum,max,min,avg

39 39 Interrogazione 12 select count(*) from Impiegato where Dipart = ‘Prod’ count( ) valori diversi tra loro non null

40 40 Interrogazioni 13, 14 Numero di stipendi diversi select count(distinct Stipendio) from Impiegato Numero di righe che hanno nome non nullo select count(all Nome) from Impiegato Gli operatori aggregati si applicano sulle tuple selezionate dalla clausola “where” (se c’è) count( )

41 41 sum, max, min, avg Prendono solo espressioni rappresentanti valori numerici o intervalli di tempo distinct e all stesso significato di prima Altri operatori a seconda delle versioni di SQL (solitamente operatori statistici)

42 42 Interrogazioni 15, 16 Somma stipendi di Amministrazione select sum(Stipendio) from Impiegato where Dipart = ‘Amministr’ Stipendi min, max, medio degli Impiegati select min(Stipendio),max(Stipendio),avg(Stipendio) from Impiegato

43 43 Interrogazione 17 Max stipendio tra impiegati che lavorano in dip a Milano select max(Stipendio) from Impiegato, Dipartimento where Dipart = Dipartimento.Nome and Dipartimento.Citta = ‘Milano’ Equi- join


Scaricare ppt "SQL Interrogazioni. 2 Interrogazioni in SQL Non esiste un SQL standard (vari dialetti) Formulazione di interrogazioni (query) è parte del Data Manipulation."

Presentazioni simili


Annunci Google