Operatori derivati dell’algebra relazionale
Join incompleti
Quando facciamo dei join ci possono essere dei casi limite che sono quelli che di seguito prendiamo in esame:
- Dangling ennuple: nel caso in cui alcuni valori tra gli attributi comuni non coincidono si hanno questo tipo di ennuple (come nel caso di seguito che mancano alcune ennuple)

- Potrebbe anche essere che nessuna ennupla trovi il suo corrispettivo e in quel caso si ha una join vuota

Join troppo completi
Ogni ennupla di si combina con ogni ennupla di e in quel caso si ha un prodotto delle cardinalità

Outer join
Per mantenere nel risultato le ennuple che non partecipano al JOIN si usa una variante del JOIN detta OUTER JOIN (giunzione esterna), si hanno tre varianti:
Le definizioni verranno date seguendo questa premessa: Date ed definite sugli insiemi di attributi e
- Left: solo dangling ennuple del primo operando
- Definizione: la giunzione esterna destra è una giunzione naturale estesa con le ennuple della parte sinistra della giunzione, completate con valori NULL:

- Definizione: la giunzione esterna destra è una giunzione naturale estesa con le ennuple della parte sinistra della giunzione, completate con valori NULL:
- Right: solo dangling ennuple del secondo operando
- Definizione: la giunzione esterna destra è una giunzione naturale estesa con le ennuple della parte destra della giunzione, completate con valori NULL:

- Definizione: la giunzione esterna destra è una giunzione naturale estesa con le ennuple della parte destra della giunzione, completate con valori NULL:
- Full: ennuple da entrambi gli operandi
- Definizione: La giunzione esterna è una giunzione naturale estesa con tutte le ennuple che non appartengono alla giunzione naturale, completate con valori NULL per gli attributi mancanti.

- Definizione: La giunzione esterna è una giunzione naturale estesa con tutte le ennuple che non appartengono alla giunzione naturale, completate con valori NULL per gli attributi mancanti.
Proprietà del JOIN
Per il JOIN valgono le proprietà:
- Commutativa:
- Associativa:
quindi possiamo avere benissimo sequenze di JOIN senza rischio ambiguità:

Prodotto cartesiano e intersezione a partire dal JOIN
Prodotto cartesiano :Il JOIN è definito anche se non ci sono attributi comuni fra le relazioni, quando succede questa cosa si ha un vero e proprio prodotto cartesiano tra le relazioni, questa è un’operazione molto dispendiosa in termini di risorse
Intersezione: Date due relazioni definite sulla stessa lista di attributi allora il natural join coincide con l’intersezione delle due relazioni
Semi-giunzione
Siano ed due relazioni con attributi e rispettivamente, è una relazione di attributi costituita da tute le ennuple di che partecipano a
La semi-giunzione è derivata perché:
Unione esterna
Siano ed due relazioni con attributi e rispettivamente, l’unione esterna è $$ R \overset{\leftrightarrow}{\cup} S = R \times {Z = NULL} \cup {X = NULL} \times S
Si ottiene estendendo ognuna delle relazioni con gli attributi dell'altra (mettendo NULL come valore) e poi si fa l'unione ![[Pasted image 20251011195523.png|500]] ###### Selezione con valori nulli Quando facciamo una selezione in un attributo dove si hanno dei valori NULL questi vengono ignorati ![[Pasted image 20251011200434.png|500]] infatti se prendiamo in considerazione condizioni come questa: $$\sigma_{Eta>30 } (Persone) ∪ \sigma_{Eta \le 30}(Persone) \not = \text{Persone}$$ possiamo dire che questo non è vera, perché se in età abbiamo dei valori NULL questi verranno esclusi dal risultato. Per valutare i valori NULL si usano delle apposite condizioni che sono: - **IS NULL** - **IS NOT NULL** Quindi la condizione di prima diventa: $$\sigma_{Eta>30}(Persone) \cup \sigma_{Eta\le30}(Persone) \cup \sigma_{Eta\,\text{IS NULL}}(Persone) = \text{Persone}Divisione
Siano gli attributi di ed quelli di , allora si ha che: Data la tabella Esami formata dalla matricola e dalla materia passata, per rispondere alla domanda:
- Quali matricole hanno passato PROG e DB? abbiamo bisogno della divisione e va impostata in questo modo: . Quello che viene logicamente fatto è:
- Prendiamo una matricola e facciamo un prodotto cartesiano con
- Se il risultato del punto precedente è un sottoinsieme della tabella allora deve essere ritornato
- Continuiamo i primi due passaggi su tutte le matricole
- Tutti i valori ritornati saranno le matricole degli studenti che hanno superato entrambe le materie
Viste
Le viste fanno parte dello schema esterno del nostro dbms, e non sono altro che delle espressioni alla quale viene assegnato un nome, le espressioni possono essere:
- Relazioni derivate: relazione il cui contenuto è funzione del contenuto di altre relazioni
- Relazioni di base: semplici relazioni
Date queste tabelle:
una vista potrebbe essere
Abbiamo 2 tipi principali di viste: - Viste materializzate: sono delle viste che vengono immagazzinate direttamente nel nostro database, sono sempre immediatamente disponibili ma portano alcune volte eccessiva ridondanza e appesantiscono il database
- Viste (o relazioni virtuali): Sono supportate da quasi tutti i DBMS e non appesantiscono il db, un interrogazione su questo tipo di vista è più lento in quanto la vista viene ricalcolata ogni volta
Le viste vengono interpretate dal nostro dbms e sostituite con il valore ad esso collegato
Le viste sono sicuramente un ottimo strumento per diversi motitivi:
- Presentazione dei dati: alcune volte si creano delle viste per creare delle autorizzazioni e far vedere agli utenti solo quello che sono autorizzati a vedere
- Programmazione: Possono aiutare i programmatori a ridurre il codice scritto per fare una query, creando anche la possibilità di riutilizzare delle query scritte in precedenza