Selezione e Proiezione Le operazioni di selezione e di proiezione si applicano ad una relazione e ne restituiscono una porzione. Possono essere considerate ortogonali o complementari, in quanto una opera sulle righe e l’altra sulle colonne. La selezione produce un insieme di tuple, su tutti gli attributi. La proiezione produce un risultato definito su un insieme di attributi, cui contribuiscono tutte le tuple.
selezione proiezione
Selezione La selezione produce una nuova relazione definita sugli stessi attributi, contenente solamente le tuple di una relazione che soddisfano una specifica condizione di selezione. Si indica con F ( r ) o SELF ( r ) dove: F è una condizione da verificare r è la relazione a cui la selezione è applicata Quindi, F ( r ) produce una relazione sugli stessi attributi di r contenente le tuple su cui F è vera.
Selezione, sintassi e semantica SEL Condizione (Operando) Condizione: espressione booleana (come quelle dei vincoli di tupla) semantica il risultato contiene le tuple dell'operando che soddisfano la condizione
Selezione F è una formula proposizionale su X, cioè una formula ottenuta combinando con i simboli (and) (or) (not) espressioni del tipo A B o A c dove : è un operatore di confronto (, , , , ) A e B sono attributi di X su cui i confronto abbia senso c è una costante tale che il confronto con A sia definito E’ definito un valore di verità di F su una tupla t: A B è vera se e solo se t[A] t[B] è vero A c è vera se t[A] c è vera F1 F2, F1 F2, F hanno l’usuale significato
SELStipendio > 50 (Impiegati) Cognome Filiale Stipendio Matricola Rossi Roma 55 7309 Neri Milano 64 5998 Milano 44 9553 Neri Napoli 64 5698 SELStipendio > 50 (Impiegati) Cognome Filiale Stipendio Matricola Neri Milano 64 5998 Rossi Roma 55 7309 Napoli 5698 44 9553 Impiegati (che guadagnano piu’ di 50) Milano 44 9553 Neri Napoli 64 5698
Selezione con valori nulli Impiegati Cognome Filiale Età Matricola Rossi Roma 32 7309 Neri Milano 45 5998 Bruni Milano NULL 9553 SEL Età>30 (Persone) SEL Età30 (Persone) Persone Perché? Perché le selezioni vengono valutate separatamente! Ma anche SEL Età>30 Età30 (Persone) Persone Perché? Perché anche le condizioni atomiche vengono valutate separatamente!
Selezione con valori nulli Per riferirsi ai valori nulli esistono forme apposite di condizioni: IS NULL IS NOT NULL SEL Età>30 (Persone) SEL Età30 (Persone) SEL Età IS NULL (Persone) = SEL Età>30 Età30 Età IS NULL (Persone) Persone
Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJY ( r ) ed è l’insieme di tuple su Y ottenute dalle tuple di r considerando solo i valori su Y. Y ( r ) = { t[Y] | t r } Una proiezione ha un numero di tuple minore o uguale rispetto alla relazione r cui è applicata. Il numero di tuple è uguale se e solo se Y è superchiave per r.
Proiezione operatore monadico produce un risultato che ha parte degli attributi dell'operando contiene tuple cui contribuiscono tutte le tuple dell'operando sintassi PROJ ListaAttributi (Operando) semantica il risultato contiene le tuple ottenute da tutte le tuple dell'operando ristrette agli attributi nella lista
visualizzare matricola e cognome di tutti gli impiegati Filiale Stipendio Matricola Neri Milano 64 5998 Napoli 55 7309 Rossi Roma 5698 44 9553 PROJ Matricola, Cognome (Impiegati) Cognome Filiale Stipendio Matricola Neri Milano 64 5998 Napoli 55 7309 Rossi Roma 5698 44 9553 PROJ Cognome, Filiale (Impiegati)
Join Combinando selezione e proiezione, si possono estrarre informazioni da una relazione Non si possono però correlare informazioni presenti in relazioni diverse Il join è l'operatore più interessante (potente) dell'algebra relazionale in quanto permette di correlare dati in relazioni diverse
Join E’ l’operatore più caratteristico, che evidenzia la proprietà del modello relazionale di essere basato su valori. L’operatore di join (naturale) correla dati in relazioni diverse, producendo una relazione definita sull’unione degli insiemi di attributi degli operandi, le cui tuple sono ottenute combinando le tuple degli operandi con valori uguali su attributi comuni.
Join Il join naturale r1 r2 di r1(X1) e r2(X2) è una relazione definita su X1X2 ( che si può scrivere X1X2 ) : r1 r2 = { t su X1X2 | t[X1] r1 e t[X2] r2} Il grado della relazione ottenuta è minore o uguale al grado della somma dei gradi delle due relazioni in quanto gli attributi omonimi compaiono una sola volta. Se X1 X2 è vuoto il join naturale equivale al prodotto cartesiano fra le relazioni. Se X1=X2 il join naturale equivale all’intersezione fra le relazioni
Join Se ciascuna tupla di ciascuno degli operandi contribuisce ad almeno una tupla del risultato il join si dice completo. Se per alcune tuple non è verificata la corrispondenza e non contribuiscono al risultato, le tuple si dicono dangling. Ai due estremi si pongono il join vuoto in cui nessuna tupla degli operandi è combinabile, e quello in cui ciascuna delle tuple di un operando è combinabile con tutte le tuple dell’altro. In questo caso la cardinalità della relazione risultante è pari al prodotto della cardinalità degli operandi
Impiegato Reparto Reparto Capo Rossi A Rossi A Rossi A A Mori A Mori A Neri B Neri B Neri B B Bruni B Bruni B Bruni B Bruni B Bruni Bianchi B Bianchi B Bianchi B Impiegato Reparto Capo Rossi A Mori Neri B Bruni Bianchi B Bruni ogni ennupla contribuisce al risultato: join completo
Un join non completo Impiegato Reparto Rossi A Neri B Bianchi Reparto Capo B Mori C Bruni A C Neri B Mori Impiegato Reparto Capo Bianchi
Un join vuoto Impiegato Reparto Rossi A Neri B Bianchi Reparto Capo D Mori C Bruni Impiegato Reparto Capo
Join Proprietà Il join di r1 e r2 contiene un numero di tuple compreso fra zero e il prodotto di |r1| e |r2| se il join di r1 e r2 è completo allora contiene un numero di tuple pari almeno al massimo fra |r1|e |r2| se X1X2 contiene una chiave per r2, allora il join di r1 (X1) e r2(X2) contiene al più |r1| tuple. se il join coinvolge una chiave di R2 e un vincolo di integrità referenziale, allora il numero di tuple è pari a |R1| r1 r2 = r1 r2 il join è commutativo (r1 r2) r3 = r1 (r2 r3) il join è associativo Quindi sequenze di join possono essere scritte senza parentesi
Join Se si devono correlare attributi con nome diverso è possibile fare il theta-join, definito come un prodotto cartesiano seguito da una selezione r1 F r2 = F (r1 r2 ) Se F è una relazione di uguaglianza, con un attributo della pima relazione e uno della seconda, allora siamo in presenza di un equi-join. Sono importanti formalmente: il join naturale è basato sui nomi degli attributi equi-join e theta-join sono basati sui valori
Rossi A Neri B Bianchi Impiegato Reparto Impiegati A Mori B Bruni Codice Capo Reparti Impiegati JOINReparto=Codice Reparti Impiegato Reparto Capo Codice Rossi A Mori B Bruni Neri Bianchi Rossi A Mori Neri B Bruni Bianchi
Join naturale ed equi-join Impiegati Reparti Impiegato Reparto Codice Capo Impiegati JOIN Reparti SELReparto=Codice ( ) PROJImpiegato,Reparto,Capo ( ) Impiegati JOIN RENCodice Reparto (Reparti)