Algebra Relazionale
Con elementi di SQL
di Giuseppe Sottile

In questo articolo parliamo di database, in particolare di interrogazioni su database relazionali. Per fare questo devo introdurre in primis un linguaggio formale astratto, un'algebra, fatta si simboli e operatori che operano su tabelle dette relazioni. Tale algebra e più propriamente chiamata algebra relazionale. Partiamo dagli operatori elementari, in seguito costruiremo query via via sempre più complesse.


\( \sigma \)
\( \pi \)
\( \times \)
\( \cup \hspace{2mm} \cap \)

Tutti i prodotti di marca \( \alpha \)
$$ {\Large \sigma}_{marca="\alpha"} (\text {marca}) $$

SELECT * FROM Marca WHERE marca = "\( \alpha \)";


I nomi delle merci di marca diversa da \( \alpha \)
$$ {\Large \pi}_{$_2} ( {\Large \sigma}_{$_3 \neq \alpha} (marca) )$$

SELECT * FROM Marca WHERE marca = "\( \alpha \)";


L'elenco dei codici delle merci fornite dal fornitore f1 a più di €10
$$ {\Large \pi}_{$_2} \left( {\Large \sigma}_{\underset{$_1 = "F1"}{$_3 \gt 10}} (Fornitura) \right)$$

SELECT f.merce FROM Fornitura f WHERE f.fornitore ="F1" AND f.prezzo > 10;


I nomi dei fornitori che forniscono merci di nome x a più di 10€
$$ {\Large \pi}_{$_1} \left( \left( Fornitura \underset{\underset{$_3>10}{$_2=$_1}}{\Join} \sigma_{$_2='x'}(Merce) \right) \underset{$_1=$_1}{\Large \Join} Fornitore \right) $$

SELECT fe.nome
FROM Fornitura fa, Merce m, Fornitore fe
WHERE fe.piva = fa.fornitore
    AND fa.merce = merce.cod
    AND fa.prezzo > 10;
    AND m.nome = 'x';


\( \spadesuit \) Codici delle merci di nome 'x' o fornite da 'F1'
$$ \pi_{$_1} (\sigma_{$_2 = 'x'}(Merce)) \hspace{2mm} \bigcup \hspace{2mm} \pi_{$_2}( \sigma_{$_1 = 'F1'}(Fornitura)) $$

SELECT Merce.nome
FROM Merce
WHERE Merce.nome = 'x'
    UNION fa.merce = merce.cod
SELECT Fornitura.merce
FROM Fornitura
WHERE Fornitura.fornitore = 'F1'



Torna alla home