OPERATORI RELAZIONALI

Come in algebra possono essere definite operazioni sulle relazioni. Ci sono operatori tipici dei database relazionali e quelli dell' insiemistica. Un operatore relazionale opera una trasformazione su una relazione e produce un’altra relazione: operatore unario (come l’operatore di selezione); oppure un operatore relazionale opera una trasformazione su due tabelle o relazioni e produce una relazione: operatore binario (operatore congiunzione).

OPERATORE UNIONE

Opera su due tabelle che hanno la stessa struttura e produce una terza tabella che contiene l’unione delle righe delle due tabelle eliminando quelle doppie: infatti abbiamo visto che nelle relazioni tutte le righe devono essere distinte.

Esempio:

TCLIENTI (codcli, nome, indirizzo, cap, citta, codfisc)

TFORNITORI (codfor, nome, indirizzo, cap, citta, codfisc)

Hanno entrambe la stessa struttura. Le due tabelle sono definite sugli stessi insiemi dominio. Non è il fatto che i nomi degli attributi siano uguali a renderli compatibili, ma il fatto che provengono dallo stesso insieme di definizione. L’unione di queste due tabelle produrrà una terza tabella che chiamerò CLIFOR con la seguente struttura:

TCLIFOR (codice, nome, indirizzo, cap, citta, codfisc).

Questa notazione si usa per descrivere le tabelle nei database relazionali: all’inizio viene il nome della tabella e tra parentesi vengono elencati i suoi attributi; la chiave primaria va indicata per prima e sottolineata.

N.B.: la cardinalità della relazione ottenuta è <= a quella della relazione di origine, il grado è =

OPERATORE INTERSEZIONE

Anche questo operatore è definito su due relazioni che devono avere la stessa struttura. L’operatore intersezione produce una relazione che contiene sono le T-ple che compaiono in entrambe le relazioni d’origine. Se ci rifacciamo all’esempio precedente, l'intersezione delle due tabelle CLIENTI e FORNITORI contiene solo quei clienti della ditta che sono anche fornitori.

N.B. La cardinalità della relazione ottenuta è < della minima tra le cardinalità delle due relazioni di origine, il grado è =.

OPERATORE DIFFERENZA

Questo operatore è un operatore binario e si applica sempre a relazioni che hanno la stessa struttura. La differenza di due relazioni contiene l’insieme delle T-ple che compaiono nella prima relazione e non compaiono nella seconda.

Esempio:

R1= Differenza (TCLIENTI, TFORNITORI)

La relazione R1 contiene tutti i clienti che non sono anche fornitori.

N.B: la cardinalità della relazione risultato è <= a quella della prima relazione, il grado è =.

OPERATORE SELEZIONE (SELECT)

Operatore unario che opera su una relazione e produce un’altra relazione che è sottoinsieme della prima. Quindi esprimendo una certa condizione, l’operatore di selezione costruirà una tabella formata dall’insieme delle T-ple che soddisfano quella condizione.

Esempio:

TARTICOLI (codice, tipo, descrizione, prezzo)

R2 = SELEZIONE (TARTICOLI, tipo = “Lavatrice”)

La relazione R2 contiene tutte le lavatrici del magazzino

N.B.: la selezione influisce sulla cardinalità di una relazione: la relazione risultato ha sempre una cardinalità <= a quella di partenza, e lo stesso grado

OPERATORE PROIEZIONE (PROJECT)

E’ un operatore unario che agisce su una relazione producendo una relazione che contiene un sottoinsieme degli attributi della relazione originale. Quindi ha la proprietà di modificare la struttura della tabella, mentre quelli che abbiamo visto finora la lasciano inalterata. Qualora nella relazione risultato ci fossero delle T-ple uguali queste vengono eliminate. Gli attributi da mantenere vengono elencati al posto della condizione.

Esempio:

TARTICOLI (codice, tipo, descrizione, prezzo)

QLISTINO = PROIEZIONE (TARTICOLI, descrizione, prezzo).

N.B.: la proiezione influisce sul grado di una relazione: la relazione risultato ha sempre un grado < di quello di partenza, e cardinalità = o < (se ci sono righe doppie da eliminare).

OPERATORE CONGIUNZIONE (JOIN)

E’ un operatore binario che agisce su due relazioni producendo una relazione che contiene tutti gli attributi delle due relazioni originali. Perchè la congiunzione abbia un senso, le due relazioni devono avere un attributo in comune, cioè devono essere state poste in relazione tra loro mediante una chiave primaria = chiave esterna.

Ci sono diversi tipi di JOIN a seconda di come l'attributo in comune viene definito:

NATURAL JOIN: quando le due chiavi (chiave primaria e chiave esterna) hanno lo stesso nome

EQUI JOIN quando sono definite da una condizione tipo chiave primaria = chiave esterna

L' equi Join si suddivide a sua volta in tre tipi:

INNER JOIN la relazione risultato esclude tutte le T-ple per cui non viene trovata una corrispondenza nell'altra tabella

LEFT JOIN la relazione risultato comprende tutte le T-ple della prima relazione, anche se non hanno corrispondenti nella seconda

RIGHT JOIN la relazione comprende tutte le T-ple della seconda relazione anche se non hanno corrispondenti nella prima

Esempio:

TARTICOLI (codice, tipo, descrizione, prezzo, fornitore)

TFORNITORI (codfisc, nome, indirizzo)

R3 = INNER JOIN (TFORNITORI, TARTICOLI, fornitore = codfisc).

Fornisce l'elenco degli articoli con i relativi fornitori: gli articoli senza fornitore e i fornitori senza articoli non sono riportati

R4 = LEFT JOIN (TFORNITORI, TARTICOLI, fornitore = codfisc).

Fornisce l'elenco di tutti i fornitori (anche quelli senza articoli) con i relativi articoli

R5 = RIGHT JOIN (TFORNITORI, TARTICOLI, fornitore = codfisc).

Fornisce l'elenco di tutti gli articoli (anche quelli senza fornitore) con i relativi fornitori

N.B.: la relazione risultante avrà una cardinalità <= alla massima tra le due cardinalità delle relazioni di origine, e il grado sarà = alla somma dei gradi - 1 (l' attributo in comune)

Gli operatori relazionali si formalizzano in questo modo:

RISULTATO = OPERATORE ((Relazione1, Relazione2) , (Condizioni)).

Avanti