Un linguaggio per la manipolazione dei dati consente di inserire, modificare ed eliminare i record all’interno di un database. Il linguaggio più utilizzato è SQL, che con qualche dialetto viene supportato da praticamente tutti i DBMS ( DataBase Management System ). Il linguaggio SQL non è stato creato dal nulla, ma fonda le sue basi sull’algebra relazionale che si basa sulla teoria relazionale dei dati che abbiamo visto in uno scorso articolo.
Il concetto fondamentale per capire una relazione è vedere un insieme di celle divise per righe e colonne, proprio come un foglio elettronico. L’algebra relazionale non è altro che un insieme di regole, così come l’algebra numerica per i numeri, per indicare come operare sulle relazioni. Tutti i complessi algoritmi dei DBMS tramite il linguaggio SQL sono basati su queste tre semplici operazioni:
- L’unione di due relazioni composte da un ugual numero di colonne, quindi con stesso grado o cardinalità, è data dall’insieme di righe che appartengono ad una oppure all’altra relazione.
- L’intersezione di due relazioni di uguale cardinalità è data dall’insieme di righe identiche in entrambe le relazioni.
- La differenza tra due relazioni della stessa cardinalità è l’insieme di righe che appartengono ad una relazione e non all’altra.
Come si nota queste operazioni prendono in input un insieme di relazioni e restituiscono una relazione risultante, questa caratteristica viene ereditata nel linguaggio SQL con il quale è possibile operare su tabelle e viste, ma non sul singolo valore contenuto in una cella.
Il prodotto cartesiano è un’operazione più complicata. Date due relazioni A e B di grado rispettivamente n ed m, il prodotto cartesiano è la relazione di grado n+m costituita da tutte le possibili combinazioni delle righe presenti in A ed in B. Ad esempio il prodotto cartesiano di queste due relazioni:
Rossi, Arezzo
Bianchi, Milano
Arezzo, AR
Milano, MI
è
Rossi, Arezzo, Arezzo, AR
Bianchi, Milano, Arezzo, AR
Rossi, Arezzo, Milano, MI
Bianchi, Milano, Milano, MI
Le operazioni di proiezione e selezione consentono di tagliare a fette una relazione per considerarne solo alcuni aspetti. La proiezione consente di eliminare alcune colonne dalla relazione originale, mentre la selezione consente di considerare solo alcune righe in base ad una condizione. Se dall’esempio precedente operiamo una proiezione sulla prima e quarta colonna otterremo:
Rossi, Arezzo
Bianchi, Arezzo
Rossi, Milano
Bianchi, Milano
Operando quindi una selezione sul risultato della proiezione, scegliendo solo il valore della seconda colonna uguale a “Milano” otterremo:
Rossi, Milano
Bianchi, Milano
L’operazione di join tra due tabelle è molto simile al prodotto cartesiano, la differenza risiede nel fatto che in questo caso dobbiamo considerare solo le righe che hanno due colonne uguali derivate dalle relazioni originarie, quindi il nostro prodotto cartesiano diventerebbe in join:
Rossi, Arezzo, Arezzo, AR
Bianchi, Milano, Milano, MI
Questo tipo di join è detto naturale, ma ci sono anche altri tipi di join differenti che si basano su condizioni diverse o confronti di colonne diverse. Lo scopo del join è sempre comunque quello di fondere due relazioni restituendo come risultato una relazione che abbia un particolare legame tra le loro colonne.
Come visto in questo articolo, l’algebra relazionale, di cui ho fatto solo una piccola introduzione, è quindi la base sulla quale si è formato un linguaggio complesso come SQL, per questo ha avuto un grande successo nei DBMS relazionali.