ALGEBRA RELAZIONALE 5^ INFORMATICO A.S 2023-2024 DIPARTIMENTO INFORMATICA A CURA PROFF. BARBARA CATTANI, ILARIA BERTOLETTI ARGOMENTI Operazioni relazionali Algebra relazionale Proiezioni Selezioni Congiunzioni Join naturale Operazioni insiemistiche Unione Join Join interno Join esterno Left join Right join Full join Self join Intersezione Differenza 2 ALGEBRA RELAZIONALE Gli operatori relazionali agiscono su una o più tabelle producendo una nuova tabella. Le operazioni relazionali servono per interrogare la base dati per estrarre le informazioni desiderate dalle tabelle del database. Principali operatori relazionali: Le relazioni sono insiemi: Selezione Unione Proiezione Intersezione Congiunzione Differenza 3 DATABASE DEGLI ESEMPI Agente IDAgente Nome Zona {PK} 1 N Contattare Cliente IDCliente {PK} RagioneSociale PartitaIVA Provincia SCHEMA LOGICO Agente ( IDAgente, Nome, Zona ) Cliente ( IDCliente, RagioneSociale, PartitaIVA, Provincia, IDAgente ) Per distinguere tra IDAgente di Agente e IDAgente di Cliente si usa la dot notation, anteponendo il nome della tabella a cui ci si riferisce esempio : Agente.IDAgente e Cliente.IDAgente 4 DATABASE DEGLI ESEMPI Il contenuto delle tabelle si suppone sia Agente Cliente IDCliente RagioneSociale Partita IVA Provincia IDAgente IDAgente Nome Zona Tond Tondini metallici 05467833808 BS Bia Bia Bianchi Nord Vitp Viteria di precisione 06443652006 MI Bia Bru Bruni Centro Vite Viteria lombarda 05567389302 MI Bia Ner Neri Centro Lami Lamiere per Auto 04357839912 TO Bia Ros Rossi Sud Prome Prodotti Metallici 05332518672 BG Gia Meta Metallurgia Emilia 01583315265 BO Ner Ver Verdi Isole Levi Levigatoria Toscana 01528120155 FI Ner Luci Lucidatura Metalli 01572800164 RM Ner Otto Ottonificio Pugliese 04687990657 BA Ros Metb Metalli Rari 01642877201 NA Ros Rame Rame & Metalli 03568168943 PA Ver 5 SELEZIONE σP R La selezione estrae dalla tabella R le sole righe che soddisfano la proprietà P, cioè le righe di R per le quali P è vera Esempio Selezione di Cliente per Provincia = “MI” IDCliente RagioneSociale Partita IVA Provincia IDAgente Vite Viteria lombarda 05567389302 MI Bia Vitp Viteria di precisione 06443652006 MI Bia Grado risultante: Cardinalità risultante: Operatore algebrico σProvincia=“MI” Cliente uguale a quello di R minore o uguale a quella di R 6 PROIEZIONE πL R La proiezione estrae dalla tabella R le sole L colonne specificate Esempio Informazioni sui Cliente su IDCliente, RagioneSociale, IDAgente IDCliente RagioneSociale IDAgente Lami Lamiere per Auto Bia Levi Levigatoria Toscana Ner Luci Lucidatura Metalli Ner Meta Metallurgia Emilia Ner Metb Metalli Rari Ros Otto Ottonificio Pugliese Ros Prome Prodotti Metallici Gia Rame Rame & Metalli Ver Prome Prodotti Metallici Gia Vite Viteria lombarda Bia Vitp Viteria di precisione Bia Operatore algebrico πIDCliente,RagioneSociale,IDAgente Cliente Grado risultante: minore o uguale a quello di R Cardinalità risultante: minore o uguale a quella di R 7 PROIEZIONE πL R La cardinalità di una proiezione di R può essere minore di quella di R perché nel modello relazionale non ci possono essere tabelle con righe uguali. Le righe duplicate sono compattate. Tabella partenza IDAgente Bia Bia Bia Bia Gia Ner Ner Ner Ros Operatore algebrico πIDAgente Cliente IDAgente Bia Gia Ner Ros Come vedremo, i DBMS, per ragioni di efficienza, non compattano le righe in modo automatico. Bisogna richiederlo esplicitamente: clausola DISTINCT nel comando SELECT di SQL Ver Ros Ver 8 PROIEZIONI E SELEZIONI Proiezione e selezione agiscono ortogonalmente Agente IDAgente Nome σP Agente Zona Bia Bianchi Nord Bru Bruni Centro Ner Neri Centro Ros Rossi Sud Ver Verdi Isole IDAgente Selezione Nome Zona Bru Bruni Centro Ner Neri Centro Le righe di Agente dove: Zona = “Centro” Proiezione πLAgente Nome Zona Bianchi Nord Bruni Centro Neri Centro Rossi Sud Verdi Isole Le colonne Nome e Zona di Agente 9 ESEMPIO DI INTERROGAZIONE Elencare RagioneSociale, PartitaIVA e Provincia dei clienti che hanno come agente l’agente di codice “Bia” σP Cliente 1. 2. Temp1 = Selezione di Cliente per IDAgente = “Bia” IDCliente RagioneSociale Partita IVA Provincia IDAgente Lami Lamiere per Auto 04357839912 TO Bia Tond Tondini metallici 05467833808 BS Bia Vite Viteria lombarda 05567389302 MI Bia Vitp Viteria di precisione 06443652006 MI Bia πL Temp1 σidAgente=“Bia” Cliente Proiezione di Temp1 su RagioneSociale, PartitaIVA, Provincia RagioneSociale Partita IVA Provincia Lamiere per Auto 04357839912 TO Tondini metallici 05467833808 BS Viteria lombarda 05567389302 MI Viteria di precisione 06443652006 MI Interrogazione in algebra relazionale πRagioneSociale, PartitaIva, Provincia(Temp1) πRagioneSociale, PartitaIva, Provincia (σ idAgente=“Bia” Cliente) 10 CONGIUNZIONE R PS La congiunzione (join) tra R e S combina due tabelle generando una nuova tabella, le cui righe contengono tutti gli attributi di R e di S, abbinando le sole righe di R e di S che soddisfano la proprietà P R PS≡ σP ( R x S ) P nella maggior parte dei casi, consiste in una o più condizioni del tipo: R.A = S.B dove A e B sono attributi di R e, rispettivamente, di S. Si parla di equi-join, indicati con: RA SB prodotto cartesiano tra R ed S, combina tutte le righe di R con tutte le righe di S, generando una tabella priva di valore informativo L’equi join più comune è quello che compone due tabelle con una condizione di uguaglianza tra la chiave primaria di una tabella e una chiave esterna dell’altra: R.PK = S.FK 11 CONGIUNZIONE - ESEMPIO Congiunzione di Cliente e Agente sul campo IDAgente con Cliente.IDAgente=Agente.IDAgente : Cliente IDAgente Agente IDCliente RagioneSociale Partita IVA Provincia Cliente.IDAgente Agente.IDAgente Nome Zona Lami Lamiere per Auto 04357839912 TO Bia Bia Bianchi Nord Tond Tondini metallici 05467833808 BS Bia Bia Bianchi Nord Vite Viteria lombarda 05567389302 MI Bia Bia Bianchi Nord Vitp Viteria di precisione 06443652006 MI Bia Bia Bianchi Nord Levi Levigatoria Toscana 01528120155 FI Ner Ner Neri Centro Luci Lucidatura Metalli 01572800164 RM Ner Ner Neri Centro Meta Metallurgia Emilia 01583315265 BO Ner Ner Neri Centro Metb Metalli Rari 01642877201 NA Ros Ros Rossi Sud Otto Ottonificio Pugliese 04687990657 BA Ros Ros Rossi Sud Rame Rame & Metalli 03568168943 PA Ver Ver Verdi Isole La stessa informazione compare due volte perché presente su tabelle diverse: in una è PK e nell’altra FK 12 CONGIUNZIONE – JOIN NATURALE R S Join Naturale tra Cliente e Agente equi join sui campi con lo stesso nome Clienti Agenti IDCliente RagioneSociale Partita IVA Provincia Cliente.IDAgente Agente.IDAgente Nome Zona Lami Lamiere per Auto 04357839912 TO Bia Bia Bianchi Nord Tond Tondini metallici 05467833808 BS Bia Bia Bianchi Nord Vite Viteria lombarda 05567389302 MI Bia Bia Bianchi Nord Vitp Viteria di precisione 06443652006 MI Bia Bia Bianchi Nord Levi Levigatoria Toscana 01528120155 FI Ner Ner Neri Centro Luci Lucidatura Metalli 01572800164 RM Ner Ner Neri Centro Meta Metallurgia Emilia 01583315265 BO Ner Ner Neri Centro Metb Metalli Rari 01642877201 NA Ros Ros Rossi Sud Otto Ottonificio Pugliese 04687990657 BA Ros Ros Rossi Sud Rame Rame & Metalli 03568168943 PA Ver Ver Verdi Isole 13 ESEMPIO INTERROGAZIONI - 1 Elenco di tutti i clienti con RagioneSociale, PartitaIVA, Provincia e Nome del rispettivo agente 1. Cliente IDAgente Agente Temp1 = Congiunzione di Cliente e Agente per Cliente.IDAgente = Agente.IDAgente IDCliente RagioneSociale Partita IVA Provincia Cliente.IDAgente Agente.IDAgente Nome Zona Lami Lamiere per Auto 04357839912 TO Bia Bia Bianchi Nord Tond Tondini metallici 05467833808 BS Bia Bia Bianchi Nord Vite Viteria lombarda 05567389302 MI Bia Bia Bianchi Nord Vitp Viteria di precisione 06443652006 MI Bia Bia Bianchi Nord Levi Levigatoria Toscana 01528120155 FI Ner Ner Neri Centro Luci Lucidatura Metalli 01572800164 RM Ner Ner Neri Centro Meta Metallurgia Emilia 01583315265 BO Ner Ner Neri Centro Metb Metalli Rari 01642877201 NA Ros Ros Rossi Sud Otto Ottonificio Pugliese 04687990657 BA Ros Ros Rossi Sud Rame Rame & Metalli 03568168943 PA Ver Ver Verdi Isole 14 ESEMPIO INTERROGAZIONI - 2 Elenco di tutti i clienti con RagioneSociale, PartitaIVA, Provincia e Nome del rispettivo agente 2. πL Temp1 Proiezione di Temp1 su RagioneSociale, PartitaIVA, Provincia, Nome RagioneSociale Partita IVA Provincia Nome Lamiere per Auto 04357839912 TO Bianchi Tondini metallici 05467833808 BS Bianchi Viteria lombarda 05567389302 MI Bianchi Viteria di precisione 06443652006 MI Bianchi Levigatoria Toscana 01528120155 FI Neri Lucidatura Metalli 01572800164 RM Neri Metallurgia Emilia 01583315265 BO Neri Metalli Rari 01642877201 NA Rossi Ottonificio Pugliese 04687990657 BA Rossi Rame & Metalli 03568168943 PA Verdi 15 ESEMPIO INTERROGAZIONI - 1 Elenco delle ragioni sociali e del nome degli agenti per i clienti di Milano 1. σP Cliente 2. Temp1 Temp1 = Selezione di Cliente per Provincia = “Mi” IDCliente RagioneSociale Partita IVA Provincia Cliente.IDAgente Vite Viteria lombarda 05567389302 MI Bia Vitp Viteria di precisione 06443652006 MI Bia Agente IDAgente Temp2 = Congiunzione di Temp1 e Agente per Cliente.IDAgente = Agente.IDAgente IDCliente RagioneSociale Partita IVA Provincia Cliente.IDAgente Agente.IDAgente Nome Zona Vite Viteria lombarda 05567389302 MI Bia Bia Bianchi Nord Vitp Viteria di precisione 06443652006 MI Bia Bia Bianchi Nord 16 ESEMPIO INTERROGAZIONI - 2 Elenco delle ragioni sociali e del nome degli agenti per i clienti di Milano 3. πL Temp2 Proiezione di Temp2 su RagioneSociale, Nome RagioneSociale Nome Viteria lombarda Bianchi Viteria di precisione Bianchi 17 OPERAZIONI INSIEMISTICHE Per tabelle con struttura omogenea, cioè righe con lo stesso numero di attributi, dello stesso tipo e nello stesso ordine R S Unione R∪S Intersezione R∩S Differenza R - S 18 OPERAZIONI INSIEMISTICHE - UNIONE L’unione consente di ottenere una nuova tabella, che contiene le righe della prima e della seconda tabella, escludendo le righe ripetute. 19 OPERAZIONI INSIEMISTICHE - INTERSEZIONE L’intersezione genera, a partire da due tabelle omogenee, una nuova tabella che contiene soltanto le righe comuni. 20 OPERAZIONI INSIEMISTICHE - DIFFERENZA Elencare gli agenti ai quali non è stato assegnato alcun cliente. La soluzione nasce dalla seguente osservazione: I codici degli agenti senza clienti sono quelli che compaiono nella colonna IDAgente di Agente, ma non si trovano nella colonna IDAgente della tabella Cliente. Pertanto in pseudocodifica si ha la seguente sequenza di operazioni: πL Agenti 2. πL Clienti Temp1 = Proiezione di Agente su IDAgente 3. Temp1 – Temp2 Temp3 = Differenza tra Temp1 e Temp2 1. Temp2 = Proiezione di Cliente su IDAgente Se, oltre al codice, si desidera anche il nome degli agenti senza clienti, la sequenza di operazioni deve proseguire con: 4. Temp3 5. πL Temp4 IDAgente Agente Temp4 = Congiunzione di Temp3 e Agente su IDAgente Proiezione di Temp4 su IDAgente, Nome. 21 ESEMPI INTERROGAZIONI Rivista CodRiv {PK} Titolo Periodicità Prezzo 1 N Essere oggetto Abbonamento ID Data N 1 Sottoscrivere {PK} Abbonato CodAbb {PK} Cognome Nome Indirizzo Città SCHEMA LOGICO Rivista ( CodRiv, Titolo, Periodicità, Prezzo ) Abbonato ( CodAbb, Cognome, Nome, Indirizzo, Città ) Abbonamento ( ID, Data, CodRiv, CodAbb) 22 ESEMPI INTERROGAZIONI - 1 SCHEMA LOGICO Rivista ( CodRiv, Titolo, Periodicità, Prezzo ) Abbonato ( CodAbb, Cognome, Nome, Indirizzo, Città ) Abbonamento ( ID, Data, CodRiv, CodAbb) Città di residenza degli abbonati a una rivista di cui si conosce il codice 1. Temp1 = Selezione di Abbonamento per CodRiv = “xx” 2. Temp2 = Congiunzione di Temp1 e Abbonato su CodAbb 3. Proiezione di Temp2 su Città πCittà ( ( σCodRiv = “xx” Abbonamento ) CodAbb Abbonato) 23 ESEMPI INTERROGAZIONI - 2 SCHEMA LOGICO Rivista ( CodRiv, Titolo, Periodicità, Prezzo ) Abbonato ( CodAbb, Cognome, Nome, Indirizzo, Città ) Abbonamento ( ID, Data, CodRiv, CodAbb) Titolo e prezzo dell’abbonamento di tutte le riviste 1. Proiezione di Rivista su Titolo, Prezzo Titolo e periodicità delle riviste con prezzo dell’abbonamento superiore a una cifra prefissata 1. Temp1 = Selezione di Rivista per Prezzo > x 2. Proiezione di Temp1 su Titolo, Periodicità 24 ESEMPI INTERROGAZIONI - 3 SCHEMA LOGICO Rivista ( CodRiv, Titolo, Periodicità, Prezzo ) Abbonato ( CodAbb, Cognome, Nome,Indirizzo, Città ) Abbonamento ( ID, Data, CodRiv, CodAbb) Cognome degli abbonati che hanno sottoscritto un abbonamento a una qualsiasi rivista, nel primo trimestre dell’anno 2023 1. Temp1 = Selezione di Abbonamento per Data >= 1/1/2023 And Data <= 31/3/2023 2. Temp2 = Congiunzione di Temp1 e Abbonato su CodAbb 3. Proiezione di Temp2 su Cognome Volendo la congiunzione può essere eseguita prima della selezione25 ESEMPI INTERROGAZIONI - 4 SCHEMA LOGICO Rivista ( CodRiv, Titolo, Periodicità, Prezzo ) Abbonato ( CodAbb, Cognome, Nome, Indirizzo, Città ) Abbonamento ( ID, Data, CodRiv, CodAbb) Cognome e codice abbonato degli abbonati alla rivista “Quattroruote” 1. Temp1 = Selezione di Rivista Titolo = “Quattroruote” 2. Temp2 = Congiunzione di Temp1 e Abbonamento su CodRiv 3. Temp3 = Congiunzione di Temp2 e Abbonato su CodAbb 4. Proiezione di Temp3 su Cognome, CodAbb Volendo la congiunzione può essere eseguita prima della selezione 26 TIPOLOGIA DI JOIN Join interno Join esterno • Equi join e join naturale • Si possono perdere informazioni • Ad esempio non è possibile ricavare clienti senza agenti o con codice errato oppure agenti senza clienti • E’ una congiunzione che restituisce tutte le righe di R o di S anche in assenza di valori uguali per gli attributi comuni • Recuperano informazioni perse • Utili per risolvere problemi su informazioni mancanti 27 JOIN ESTERNI – LEFT JOIN R Left join S elenca tutte le righe di R; le righe di R senza corrispondenti in S sono completate con valori nulli. IDCliente RagioneSociale Partita IVA Provincia Cliente.IDAgente Agente.IDAgente Nome Zona Lami Lamiere per Auto 04357839912 TO Bia Bia Bianchi Nord Tond Tondini metallici 05467833808 BS Bia Bia Bianchi Nord Vite Viteria lombarda 05567389302 MI Bia Bia Bianchi Nord Vitp Viteria di precisione 06443652006 MI Bia Bia Bianchi Nord Prome Prodotti Metallici 05332518672 BG Gia Levi Levigatoria Toscana 01528120155 FI Ner Ner Neri Centro Luci Lucidatura Metalli 01572800164 RM Ner Ner Neri Centro Meta Metallurgia Emilia 01583315265 BO Ner Ner Neri Centro Metb Metalli Rari 01642877201 NA Ros Ros Rossi Sud Otto Ottonificio Pugliese 04687990657 BA Ros Ros Rossi Sud Rame Rame & Metalli 03568168943 PA Ver Ver Verdi Isole Campo di cliente che non trova corrispondente nella tabella Agente perché non esiste 28 JOIN ESTERNI – RIGHT JOIN R Right join S elenca tutte le righe di S; le righe di S senza corrispondenti in R sono completate con valori nulli. IDCliente RagioneSociale Partita IVA Provincia Cliente.IDAgente Agente.IDAgente Nome Zona Lami Lamiere per Auto 04357839912 TO Bia Bia Bianchi Nord Tond Tondini metallici 05467833808 BS Bia Bia Bianchi Nord Vite Viteria lombarda 05567389302 MI Bia Bia Bianchi Nord Vitp Viteria di precisione 06443652006 MI Bia Bia Bianchi Nord Bru Bruni Centro Levi Levigatoria Toscana 01528120155 FI Ner Ner Neri Centro Luci Lucidatura Metalli 01572800164 RM Ner Ner Neri Centro Meta Metallurgia Emilia 01583315265 BO Ner Ner Neri Centro Metb Metalli Rari 01642877201 NA Ros Ros Rossi Sud Otto Ottonificio Pugliese 04687990657 BA Ros Ros Rossi Sud Rame Rame & Metalli 03568168943 PA Ver Ver Verdi Isole Agenti che non hanno ancora clienti abbinati e quindi non trovano corrispondenza in clienti 29 PROBLEMI DI ASSENZA - ESEMPI Clienti senza agenti corrispondenti 1. 2. Temp1 = Cliente Left Join Agente su IDAgente Selezione di Temp1 per Agente.IDAgente Nullo IDCliente RagioneSociale Partita IVA Provincia Cliente.IDAgente Prome Prodotti Metallici 05332518672 BG Gia Agente.IDAgente Nome Zona Agenti senza corrispondenti clienti 1. Temp1 = Agente Right Join Cliente su IDAgente 2. Selezione di Temp1 per Cliente.IDAgente Nullo IDCliente RagioneSociale Partita IVA Provincia Cliente.IDAgente Agente.IDAgente Nome Zona Bru Bruni Centro 30 FULL JOIN Full join tra R ed S elenca tutte le righe di R e di S. Le righe senza corrispondenti di R o di S sono completate con valori nulli R Full join S = R Left join S ∪ R Right join S non è sempre implementato nei DBMS perché restituisce un risultato molto vasto 31 SELF JOIN Si parla di self join quando si combinano le righe di una tabella con le righe della tabella stessa. Si presentano con le tabelle derivate da associazioni ricorsive 32 SELF JOIN - ESEMPIO Nome, Cognome del capo di Bianchi 1. TEMP 1 = Dipendente Join Dipendente_1 su Dipendente.MatSupervisore = Dipendente_1.Matricola 2. TEMP 2 = Selezione di TEMP 1 per Dipendente.Cognome = “Bianchi” 3. Proiezione di TEMP 2 sui campi Dipendente_1.Nome, Dipendente_1.Cognome 33