1 / 50

Algebra relazionale (III)

Algebra relazionale (III). Esempi di Interrogazioni: 3. Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di 2.000 Tutti gli impiegati? Selezionare capi che hanno impiegati con stipendio < 2.000  Capo (Supervisione  Matr=Impiegato ( Stip<2.000 (Impiegati))).

illias
Download Presentation

Algebra relazionale (III)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algebra relazionale (III)

  2. Esempi di Interrogazioni: 3 • Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di 2.000 • Tutti gli impiegati? Selezionare capi che hanno impiegati con stipendio < 2.000 Capo(Supervisione Matr=Impiegato(Stip<2.000(Impiegati)))

  3. Esempi di Interrogazioni: 3 • Sottrarre tali capi all’insieme di tutti i capi Capo(Supervisione) – Capo(Supervisione Matr=Impiegato(Stip<2.000(Impiegati)))

  4. Esempi di Interrogazioni: 3 • Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di 2.000 Matr,Nome(Impiegati Matr=Impiegato (Capo(Supervisione) – Capo(Supervisione Matr=Impiegato(Stip<2.000(Impiegati)))))

  5. Algebra con valori nulli • Come applicare espressioni di algebra relazionale in presenza di tuple con valori nulli? • Per esempio: Età>30(Impiegati) • Se in relazione Impiegati non si conosce età di alcune persone: tuple 104 e 219 devono essere selezionate?

  6. Algebra con valori nulli • Logica a 3 valori per il trattamento di valori veri, falsi, sconosciuti: T, F, U (unknown) • Un predicato può assume valore U quando uno dei termini del confronto ha valore nullo • Tabelle di verità dei connettivi: AND, OR, NOT

  7. Algebra con valori nulli • Poiché ragionare su valori nulli è complesso, adottiamo approccio semplificato al trattamento del valore nullo nelle espressioni dell’algebra relazionale • Definiamo due nuove condizioni atomiche di selezione: dato attributo A • A IS NULL: vera su tupla t se il valore di t su A è nullo; falsa se valore specificato • A IS NOT NULL: vera su t se valore di t su A specificato, falsa altrimenti

  8. Algebra con valori nulli • Interpretiamo le condizioni di selezione in modo restrittivo, escludendo da selezione le tuple con valore U, a meno che non sia espicitamente incluso nella selezione

  9. Algebra con valori nulli • Per esempio: • Età>30(Impiegati) – le tuple con Età null non vengono selezionate (su di esse la condizione Età>30 assume valore U) • Età>30  Età IS NULL(Impiegati) – si includono anche le tuple con Età sconosciuta (104, 210 in relazione Impiegati)

  10. Viste • Relazioni derivate definite su relazioni di schema logico • Viste materializzate (con tuple memorizzate in DB) • Relazioni virtuali, o viste (memorizzate in DB mediante espressioni del linguaggio di interrogazione, senza memorizzazione di tuple)

  11. Viste • DBMS offrono solo relazioni virtuali (no ridondanza dati) • Interrogazioni che utilizzano viste sono risolte sostituendo la definizione delle viste alle loro occorrenze

  12. Viste • Per esempio: • R1(A,B,C), R2(C,D,E), R3(E,G) • Vista: R = A>D(R1  R2) • Interrogazione: B=G(R  R3) risolta così: B=G(A>D(R1  R2)  R3)

  13. Viste • Viste utile per: • Permettere ad applicazioni di utilizzare relazioni che contengono solo le informazioni di interesse • Se schema di DB viene ristrutturato, ricreare relazioni eliminate per evitare di modificare le applicazioni che le usavano • Per esempio: R(A,B,C) sostituita in DB da R1(A,B), R2(B,C), e definiamo vista R= R1R2

  14. SQL Interrogazioni

  15. 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à)

  16. 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

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

  18. 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”)

  19. 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 (la lista dopo la clausola “select”)

  20. Tabella “Impiegato” Impiegato

  21. select Stipendio as Salario from Impiegato where Cognome = ‘Rossi’ Interrogazione 1

  22. select Stipendio as Salario from Impiegato where Cognome = ‘Rossi’ Interrogazione 1 alias

  23. select * from Impiegato where Cognome = ‘Rossi’ Interrogazione 2

  24. select * from Impiegato where Cognome = ‘Rossi’ Interrogazione 2 tutti

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

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

  27. 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

  28. Tabella “Dipartimento” Dipartimento

  29. 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 Interrogazione 4

  30. 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 Interrogazione 4 La notazione punto ( ) serve per disambiguare Suggerimento: “from”, “where”, target list

  31. Risultato interrogazione 4

  32. Interrogazione 5 select I.Nome, Cognome, D.Città from Impiegato [as] I, Dipartimento [as] D where Dipart = D.Nome L’aliasing per le tabelle serve a disambiguare, ma non solo (vedremo…)

  33. 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

  34. select Nome,Cognome from Impiegato where Ufficio = 20 and Dipart =‘Amministr’ Interrogazione 6

  35. 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’) Interrogazione 7 e 8 1 1 2 2

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

  37. Interrogazione 9 select * from Impiegato where Cognome like ‘_o%i’ or Cognome like ‘_u%i’

  38. 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

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

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

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

  42. 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’

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

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

  45. 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

  46. 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

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

  48. 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

  49. 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

  50. Interrogazione 12 select count(*) from Impiegato where Dipart = ‘Prod’ count(<*|[distinct|all|]ListaAttributi>) valori diversi tra loro non null

More Related