Algebra relazionale
Comprendere l’algebra relazionale come fondamento teorico del linguaggio SQL. Operazioni unarie π e σ, binarie × e ⋈, insiemistiche ∪ ∩ −, e traduzione diretta in query SQL.
1. Cos’è l’Algebra Relazionale
L’algebra relazionale è il linguaggio formale che sta alla base di SQL. È stata inventata da Edgar F. Codd nel 1970 nel suo paper fondamentale “A Relational Model of Data for Large Shared Data Banks”. Prima che esistesse SQL, si descrivevano le interrogazioni ai database usando questo sistema matematico.
Studiare l’algebra relazionale è utile perché ti aiuta a ragionare su cosa fa una query prima di scriverla: capire i dati che escono, prevedere problemi di performance, e comprendere come l’ottimizzatore SQL interpreta le tue istruzioni.
L’algebra relazionale è un’algebra procedurale che opera su relazioni (insiemi di tuple) e produce come risultato nuove relazioni. Ogni operazione prende una o due relazioni come input e ne restituisce una come output.
Ragazzi, SQL è dichiarativo: dite cosa volete, non come ottenerlo. L'algebra relazionale è procedurale: dite passo passo come ottenerlo. L'ottimizzatore SQL traduce il vostro SELECT in algebra relazionale per decidere ordine migliore di esecuzione. Se capite π e σ, capite perché WHERE prima di SELECT è più efficiente. È come studiare grammatica prima di scrivere poesie.
Dati di esempio - Le tabelle che useremo
2. Operazioni Unarie - π e σ
Le operazioni unarie agiscono su una sola relazione. Le principali sono la proiezione e la selezione.
SELECT nome, cognome FROM STUDENTE;
SELECT * FROM ESAME WHERE voto > 27;
Le operazioni si possono comporre: il risultato di una diventa input della successiva. Per trovare nome e cognome degli studenti del quinto anno: πnome, cognome( σanno = 5(STUDENTE) ). Prima si applica σ (seleziona anno=5), poi π sui risultati (solo nome e cognome). SQL: SELECT nome, cognome FROM STUDENTE WHERE anno = 5. Prima filtri righe, poi colonne: più efficiente.
3. Prodotto Cartesiano e Join
Le operazioni binarie agiscono su due relazioni. Il prodotto cartesiano è la base teorica, ma il join è l'operazione concreta che usi ogni giorno in SQL.
SELECT * FROM STUDENTE NATURAL JOIN ESAME; -- oppure, più esplicito: SELECT * FROM STUDENTE s JOIN ESAME e ON s.id = e.id_studente;
Theta-join e Equi-join
SELECT * FROM R JOIN S ON R.id < S.id;
SELECT * FROM STUDENTE S JOIN ESAME E ON S.id = E.id_studente;
4. Operazioni Insiemistiche
Le operazioni insiemistiche lavorano su due relazioni compatibili — cioè con lo stesso numero di attributi e tipi corrispondenti. Corrispondono agli operatori sugli insiemi della matematica.
SELECT nome FROM R UNION SELECT nome FROM S;
SELECT nome FROM R INTERSECT SELECT nome FROM S; -- MySQL: simula con JOIN
SELECT nome FROM R EXCEPT SELECT nome FROM S; -- MySQL: NOT IN / NOT EXISTS
Le operazioni insiemistiche richiedono che le due relazioni siano union-compatible: stesso numero di attributi e tipi corrispondenti. Due tabelle con struttura diversa non possono essere unite con UNION, INTERSECT o EXCEPT — usa il JOIN invece.
5. Corrispondenza Algebra Relazionale ↔ SQL
Questa è la tabella di riferimento fondamentale per tradurre espressioni algebriche in SQL e viceversa. Tienila sempre a portata di mano durante gli esercizi.
| Simbolo | Operazione | Espressione Algebrica | Equivalente SQL |
|---|---|---|---|
| π | Proiezione | πnome,voto(ESAME) | SELECT nome, voto FROM ESAME |
| σ | Selezione | σvoto>27(ESAME) | SELECT * FROM ESAME WHERE voto > 27 |
| × | Prodotto cartesiano | STUDENTE × ESAME | SELECT * FROM STUDENTE, ESAME |
| ⋈ | Join naturale | R ⋈ S | SELECT * FROM R NATURAL JOIN S |
| ⋈θ | Theta/Equi-join | R ⋈R.id=S.id S | SELECT * FROM R JOIN S ON R.id = S.id |
| ∪ | Unione | R ∪ S | SELECT … FROM R UNION SELECT … FROM S |
| ∩ | Intersezione | R ∩ S | SELECT … FROM R INTERSECT SELECT … FROM S |
| − | Differenza | R − S | SELECT … FROM R EXCEPT SELECT … FROM S |
Esempio completo: espressione composta
Traduzione di una query complessa dalla forma algebrica a SQL. Trova nome e materia degli studenti del 4° anno con voto superiore a 26.
SELECT s.nome, e.materia FROM STUDENTE s JOIN ESAME e ON s.id = e.id_studente WHERE s.anno = 4 AND e.voto > 26;
In algebra scrivi σ poi π: prima filtri righe, poi scegli colonne — logico ed efficiente. In SQL scrivi SELECT prima ma il DBMS esegue WHERE prima di SELECT, proprio come algebra. Quindi quando scrivete SELECT nome FROM STUDENTE WHERE anno=5, il motore fa prima σanno=5 poi πnome. L'algebra spiega perché SQL funziona così.
L’algebra relazionale è la base teorica di SQL: ogni query SQL corrisponde a un’espressione algebrica. π (proiezione) seleziona le colonne — corrisponde alla lista dopo SELECT. σ (selezione) filtra le righe — corrisponde a WHERE. Il prodotto cartesiano (×) combina tutto con tutto: senza una condizione di join diventa inutile e molto costoso (N×M righe). Il join naturale (⋈) è il prodotto cartesiano filtrato sugli attributi comuni. Il theta-join usa una condizione generica, l’equi-join usa l’uguaglianza. Le operazioni insiemistiche (∪ ∩ −) richiedono relazioni union-compatible. In MySQL: UNION, INTERSECT (simulata), EXCEPT (simulata con NOT IN).
Vuoi passare all'azione? Accedi alla repository ufficiale GitHub del corso per scaricare i file del laboratorio pratico in formato .md.
Vuoi consultare la sezione dedicata ai laboratori sul sito? Accedi cliccando il pulsante qui sotto.
🛠️ Sezione dedicata ai Laboratori📚 Prossimo passo - Da algebra a SQL DDL/DML
Nella prossima lezione passiamo da teoria a pratica: CREATE TABLE con chiavi, INSERT, SELECT con JOIN veri in MySQL. Se oggi avete capito πσ⋈, domani scrivere SELECT ... JOIN ... WHERE vi sembrerà naturale. Esercizio: riscrivete in algebra relazionale SELECT nome FROM STUDENTE WHERE anno=4 — poi tradudetela di nuovo in SQL. Se ci riuscite in entrambi i sensi, avete capito.
