Le operazioni relazionali (continua) Join esterno
Esempio di equi-join IDAgente Nome Zona Bia Bianchi Nord Bru Bruni Centro Ner Neri Ros Rossi Sud Ver Verdi Isole Se effettuiamo l’operazione di congiunzione ClientiA⋈AgentiA di Clienti e Agenti su IDAgente otteniamo la tabella nella diapositiva seguente IDCliente Ragione Sociale PartitaIVA Provincia IDAgente Lami Lamiere per auto 01234567890 TO Bia Levi Levigatura Toscana 25874196301 FI Ner Luci Lucidatura metalli 45678912312 Meta Metallurgica Emiliana 32154789635 BO Gra Metb Metalli rari 78965412585 NA Ros
Esempio di equi-join (continua) Si ottiene la tabella IDCliente Ragione Sociale PartitaIVA Provincia Clienti. IDAgente Agenti. Nome Zona Lami Lamiere per auto 01234567890 TO Bia Bianchi Nord Levi Levigatura Toscana 25874196301 FI Ner Neri Centro Luci Lucidatura metalli 45678912312 Metb Metalli rari 78965412585 NA Ros Rossi Sud Notiamo che la riga di Clienti con IDCliente Meta non appare in quanto l’agente con codice Gra non è presente nella tabella Agenti Così come gli agenti con codice Ver e Bru non appaiono nella congiunzione perché nessun cliente è associato a loro
Il join esterno Il join esterno è una congiunzione che restituisce le righe dell’una e dell’altra tabella anche se NON sono presenti valori uguali tra gli attributi comuni. Vediamo i tipi di join esterno left join right join full join
Il left join Il left join elenca comunque tutte le righe della prima tabella congiungendo, tra le righe della seconda, solo quelle per le quali si trovano valori corrispondenti per gli attributi comuni. Nella congiunzione con il left join le righe senza corrispondenti nella seconda tabella sono completate con valori nulli.
Esempio left join Clienti Left Join Agenti IDCliente Ragione Sociale PartitaIVA Provincia Clienti. IDAgente Agenti. Nome Zona Lami Lamiere per auto 01234567890 TO Bia Bianchi Nord Levi Levigatura Toscana 25874196301 FI Ner Neri Centro Luci Lucidatura metalli 45678912312 Meta Metallurgica Emiliana 32154789635 BO Gra Metb Metalli rari 78965412585 NA Ros Rossi Sud Le righe di Clienti senza valori corrispondenti sono completate con valori nulli
Il right join Il right join elenca comunque tutte le righe della seconda tabella congiungendo, tra le righe della prima, solo quelle per le quali si trovano valori corrispondenti per gli attributi comuni. Nella congiunzione con il right join le righe senza corrispondenti nella prima tabella sono completate con valori nulli.
Esempio right join Clienti Right Join Agenti IDCliente Ragione Sociale PartitaIVA Provincia Clienti. IDAgente Agenti. Nome Zona Lami Lamiere per auto 01234567890 TO Bia Bianchi Nord Levi Levigatura Toscana 25874196301 FI Ner Neri Centro Luci Lucidatura metalli 45678912312 Bru Bruni Ver Verdi Isole Metb Metalli rari 78965412585 NA Ros Rossi Sud Le righe di Agenti senza valori corrispondenti sono completate con valori nulli
Il full join Il full join elenca comunque tutte le righe della prima e della seconda tabella congiungendo quelle per le quali si trovano valori corrispondenti per gli attributi comuni. Nella congiunzione con il full join le righe senza corrispondenti nella prima o della seconda tabella sono completate con valori nulli.
Esempio full join Clienti Full Join Agenti IDCliente Ragione Sociale PartitaIVA Provincia Clienti. IDAgente Agenti. Nome Zona Lami Lamiere per auto 01234567890 TO Bia Bianchi Nord Levi Levigatura Toscana 25874196301 FI Ner Neri Centro Luci Lucidatura metalli 45678912312 Meta Metallurgica Emiliana 32154789635 BO Gra Bru Bruni Ver Verdi Isole Metb Metalli rari 78965412585 NA Ros Rossi Sud Le righe di Clienti o di Agenti senza valori corrispondenti sono completate con valori nulli Le righe di Clienti o di Agenti senza valori corrispondenti sono completate con valori nulli
Self join Il self join è una congiunzione con la quale vengono combinate righe di una tabella con righe della stessa tabella quando sono presenti valori corrispondenti tra attributi, cioè due attributi dello stesso dominio.
Esempio Self Join Impiegati: la colonna Dir indica il codice del dirigente Codice Cognome Stipendio Dir 1 Bianchi 26000 5 2 Neri 24000 3 Rossi 28000 4 Viola 30000 Gatti 40000 6 Leoni 45000 7 Mori Effettuiamo un self join con le colonne Codice e Dir
Esempio Self Join (continua) Ridenominiamo le colonne CognomeDir, StipendioDir e DirDelDir Codice Cognome Stipendio Dir CognomeDir StiperndioDir DirDelDir 1 Bianchi 26000 5 Gatti 40000 6 2 Neri 24000 3 Rossi 28000 4 Viola 30000 Leoni 45000 7 Mori
Interrogazioni con più operatori Le operazioni di selezione e di proiezione agiscono su una sola tabella alla volta, mentre la congiunzione agisce su più tabelle. Le varie operazioni possono essere adoperate in successione (come in matematica)
Esempio di più operatori in cascata Temp1 = Selezione P Clienti dove Provincia = «FI» Temp2 = Congiunzione del risultato Temp1 con Agenti su IDAgenti Temp1A⋈AgentiA IDCliente RagioneSociale PartitaIVA Provincia IDAgente Levi Levigatura Toscana 25874196301 FI Ner Luci Lucidatura metalli 45678912312 IDCliente RagioneSociale PartitaIVA Provincia Clienti. IDAgente Agenti. Nome Zona Levi Levigatura Toscana 25874196301 FI Ner Neri Centro Luci Lucidatura metalli 45678912312 Proiezione di Temp2 su RagioneSociale e Nome LTemp2 RagioneSociale Nome Levigatura Toscana Neri Lucidatura metalli
Esempio con più operatori (continua) L’esempio appena calcolato si può scrivere: RagioneSociale, Nome[ (Provincia=«FI»Clienti)IDAgente ⋈ AgentiIDAgente ] Possiamo scrivere espressioni complesse in modo semplice. Cosa calcola RagioneSociale, PartitaIVA(Provincia=«TO»Clienti)?