Le differenze tra algebra relazionale e SQL
Sia l'algebra relazionale che il linguaggio SQL sono nate per la gestione delle basi dati relazionali. SQL è un'estensione dell'algebra razionale.
Tuttavia, l'algebra relazionale è soprattutto teorica. E' utile per capire il funzionamento delle interrogazioni nelle basi dati.
Il linguaggio SQL è invece più pratico ed è effettivamente usato nei DBMS per interrogare o definire un database.
Inoltre, nel linguaggio SQL ci sono comandi non presenti in algebra relazionale (es. il join esterno, gli operatori aggregati, ecc.).
Nota. Il linguaggio SQL è un linguaggio sia DML (Data Manipolation Language) e sia DDL (Data Definition Language). Ad esempio, oltre ai comandi per interrogare le tabelle (DML) ha anche dei comandi per creare e definire le tabelle (DDL).
Oltre a questi aspetti ci sono anche diverse altre differenze.
Linguaggio procedurale vs dichiarativo
La principale differenza tra SQL e algebra relazionale è nel linguaggio.
- L'algebra relazionale è procedurale. In un interrogazione si specifica la procedura, ossia il modo, per raggiungere un obiettivo.
- Il linguaggio SQL è dichiarativo. In un interrogazione si specifica l'obiettivo dell'interrogazione e non la procedura per ottenerlo.
Le query digitate dagli utenti sono ottimizzate e modificate dal DBMS tramite il query optimizer (o query engine) in una forma equivalente più efficiente e più veloce possibile.
Cosa sono le interrogazioni equivalenti? Esistono diverse strade (forme) per raggiungere lo stesso risultato finale. Quando due interrogazioni raggiungono lo stesso risultato sono dette interrogazioni equivalenti.
L'utente non vede la query tradotta dal query optimizer ma soltanto il risultato finale.
Indirettamente questo vuol dire che in SQL l'utente/programmatore non deve preoccuparsi di trovare la forma più efficiente dell'interrogazione.
E' sufficiente che scriva una query efficace per raggiungere l'obiettivo.
Può scriverla in un modo leggibile, facilmente interpretabile e modificabile, in una forma di linguaggio di alto livello.
Nota. E' opportuno specificare che il query optimizer non cerca la forma ottimale, la migliore possibile, perché la ricerca richiederebbe troppo tempo. Si accontenta di trovare una forma equivalente della query nello spazio delle soluzioni accettabili.
I valori duplicati
Un'altra differenza tra algebra relazionale e SQL sono i valori duplicati.
Cos'è un valore duplicato? Un duplicato è una tupla (riga) con gli stessi valori in tutte le colonne.
La gestone dei duplicati è differente
- L'algebra relazionale non ammette valori duplicati. Si basa sul concetto insiemistico di relazione matematica. In un insieme non possono esserci valori duplicati perché violerebbero il concetto di relazione tra due insiemi.
- Il linguaggio SQL ammette valori duplicati. Il linguaggio SQL non si basa sul concetto di relazione matematica perché la gestione dei valori duplicati è un'operazione molto costosa. L'eliminazione dei duplicati richiede l'ordinamento dei dati. Inoltre, spesso l'eliminazione dei duplicati non è necessaria. Per questa ragione di default il linguaggio SQL non elimina le righe duplicate in una tabella. E' possibile eliminare i duplicati solo su richiesta usando la clausola DISTINCT in un'interrogazione.
Nota. Di default nel linguaggio SQL le SELECT usano la clausola ALL che seleziona anche i duplicati. La clausola ALL è l'inverso di DISTINCT. Pertanto, scrivere SELECT ALL o semplicemente SELECT è la stessa cosa. Viceversa, scrivere SELECT DISTINCT obbliga il DBMS a scartare le righe duplicate.
Gli operatori aggregati
In algebra relazionale le condizioni sono applicate su una tupla per volta, indipendentemente dalle altre.
Nel linguaggio SQL, invece, è possibile utilizzare degli operatori che agiscono sull'insieme.
Esempio. In un'interrogazione SQL è possibile contare il numero delle righe di una tabella con l'operatore aggregato COUNT, sommare i valori con SUM, trovare il massimo e il minimo con MAX e MIN, calcolare la media con AVG. Tutte queste operazioni non sono possibili in algebra relazionale.
E così via.