2. Algebra Relazionale

Nei seguenti paragrafi si farà riferimento allo schema di base di dati dell’immagine sotto.

Selezione

La sintassi è σPR\sigma_PR, dove P è un predicato ed R è la relazione alla quale si applica la selezione.

Questo operatore fornisce una tabella con lo stesso schema di R e che ha come tuple il sottoinsieme di tuple di R che rende vero il predicato P.

Nel predicato P si possono usare AND, OR, NOT, true, false, i comparatori =, \neq, <, \leq, >, \geq, costanti, attributi ed espressioni aritmetiche di costanti e attributi.

Es: σnome="Paola"STUDENTE\sigma_{nome = "Paola"} STUDENTE. Questa operazione seleziona tutte le persone che si chiamano Paola dalla tabella Studente.

Proiezione

La sintassi è ΠAttr1,Attr2R\Pi_{Attr_1, Attr_2}R, dove Attr1 e Attr2 sono attributi della relazione R ed R è la relazione alla quale si applica la proiezione.

Questo operatore fornisce una tabella con lo schema formato dagli attributi indicati (provenienti da R) e che ha come tuple la restrizione di tutte le tuple di R sullo schema fornito.

Inoltre elimina i duplicati.

Prodotto cartesiano

La sintassi è R×SR \times S, dove R ed S sono due relazioni.

Questo operatore fornisce una tabella con lo schema formato da tutti gli attributi di R ed S e che ha come tuple tutte le possibili coppie di tuple di R e di S.

Assegnamento

La sintassi è NOME = INTERROGAZIONE.

Questo operatore consente di dare un nome al risultato di un’operazione algebrica.

Es. TORINESI = σCittaˋ="Torino"STUDENTE\sigma_{Città = "Torino"}STUDENTE.

Ridenominazione

La sintassi è ρnomeNuovo<nomeVecchioR\rho_{nomeNuovo <-- nomeVecchio}R, dove R è una relazione.

Questo operatore consente di cambiare il nome degli attributi di una relazione.

Join

La sintassi è R1PR2R_1 \Join_{P} R_2, dove R1 ed R2 sono relazioni e P è un predicato.

Il Join è equivalente a σP(R1×R2)\sigma_P(R_1\times R_2).

In presenza di attributi omonimi nella due tabelle di usa la notazione punto per disambiguare.

Questo operatore fornisce una tabella che ha per schema la concatenazione degli schemi delle due relazioni coinvolte e che ha come tuple le tuple ottenute concatenandole tuple di R1 e quelle di R2 che soddisfano il predicato P.

Un join che ha solo predicati di uguaglianza al suo interno si chiama Equi-Join; un join si dice naturale quando viene fatto l’equi-join di tutti gli attributi omonimi (in questo caso si omette il predicato e si eliminano le colonne ripetute).

Semi-Join

La sintassi è RPSR\ltimes_P S, dove R ed S sono relazioni e P è un predicato.

Questo operatore fornisce lo stesso risultato del Join tra R ed S, ma la tabella prodotta presenta solo lo schema di R.

È possibile anche fare questo: RPSR\rtimes_P S.

Operazioni insiemistiche

Intersezione: R \cap S

Unione: R \cup S

Differenza: R - S

R ed S devono essere compatibili:

Queste tre operazioni producono una tabella con lo stesso schema di R e come tuple l’intersezione / l’unione / la differenza delle tuple di R ed S.

Divisione

R ÷ S, che è equivalente alla seguente espressione: ΠRSRΠRS((ΠRSR×S)R)\Pi_{R-S}R-\Pi_{R-S}((\Pi_{R-S}R\times S) - R).

Questo operatore è utile per esprimere il quantificatore universale: seleziona le tuple di R che contengono tutte le tuple di S.

Ottimizzazioni

  1. Fare il push della Selezione
  1. Trasformare Prodotto Cartesiano seguito da Selezione in Join
  1. Atomizzare le Selezioni complesse in Selezioni semplici