proiezione:
$PROJ_{lista\_attributi}(tabella)$
Esempio: restituire il nome e il cognome dei clienti
$PROJ_{Nome, Cognome} (Cliente)$
comando select:
select lista_elementi_selezione
from lista_riferimenti_tabella
Esempio: restituire il nome e il cognome dei clienti
select nome, cognome
from cliente
all/distinct:
select [all|distinct] lista_elementi_selezione
from lista_riferimenti_tabella
Esempio: restituire il cognome dei clienti
select distinct cognome
from cliente
nota: in algebra relazionale la proiezione elimina le tuple duplicate
Esempio: restituire tutti i dati delle officine
select *
from officina
selezione:
$SEL_{lista\_condizioni} (tabella)$
Esempio: restituire tutte le officine di Salerno
$SEL_{città = 'Salerno'} (Officina)$
select *
from officina
where citta = 'Salerno
join naturale:
$relazione\_1 \space JOIN \space relazione\_2$
Esempio: restituire tutti i clienti (nome e cognome) proprietari di autoveicoli con categoria emissione “Euro 6”
$PROJ_{Nome, Cognome} (Cliente \space JOIN \space SEL_{Categoria Emissione = 'Euro6'}(Autoveicolo))$
join naturale:
select [all|distinct] lista_elementi_selezione
from tabella_1 natural join tabella_2
[where espressione_condizionale]
Esempio: restituire tutti i clienti (nome e cognome) proprietari di autoveicoli con categoria emissione “Euro 6”
select nome, cognome
from cliente natural join autoveicolo
where categoriaEmissione = 'Euro 6'
equi-join:
$relazione\1 \space JOIN{condizione} \space relazione_2$
Esempio: restituire tutte le auto (targa, modello) su cui sono stati effettuati interventi a partire dal 03/11/2018
$PROJ_{Targa, Modello} (Autoveicolo \space JOIN_{Targa = Targa Autoveicolo} \space (SEL_{DataInizio \geq '2018-11-03'}(Intervento)))$
equi-join:
select [all|distinct] lista_elementi_selezione
from tabella_1 inner join tabella_2
on condizione_join
[where espressione_condizionale]
Esempio: restituire tutte le auto (targa, modello) su cui sono stati effettuati interventi a partire dal 03/11/2018
select targa, modello
from autoveicolo inner join intervento
on autoveicolo.targa = intervento.targaAutoveicolo
where dataInizio >= '2018-11-03'
group by:
select lista_attribtuti_o_espressioni
from lista_tabelle
[where condizioni_semplici]
[group by lista_attributi_di_raggruppamento]
[having condizioni_aggregate]
[order by lista_atrributi_di_ordinamento]
Esempio: per ogni ricambio restituire il numero di interventi in cui sono stati impiegati (nome, numInterventi)
select nome, count(codiceRicambio) as numInterventi
from ricambio inner join utilizzo
on ricambio.codice = utilizzo.codiceRicambio
group by codiceRicambio, nome
Esempio: per ogni ricambio restituire il numero di interventi in cui sono stati impiegati e la quantità totale richiesta (nome, numInterventi, quantitaTotale)
select nome, count(codiceRicambio) as numInterventi, sum(quantita) as quantitaTotale
from ricambio inner join utilizzo
on ricambio.codice = utilizzo.codiceRicambio
group by codiceRicambio, nome
Esempio: per ogni ricambio restituire il numero di interventi in cui sono stati impiegati, con una quantità maggiore di uno, e la quantità totale richiesta (nome, numInterventi, quantitaTotale)
select nome, count(codiceRicambio) as numInterventi, sum(quantita) as quantitaTotale
from ricambio inner join utilizzo
on ricambio.codice = utilizzo.codiceRicambio
where quantita > 1
group by codiceRicambio, nome
Esempio: per ogni ricambio restituire la quantità totale richiesta se e solo se sono stati impiegati in più di un intervento (nome, quantitaTotale)
select nome, sum(quantita) as quantitaTotale
from ricambio inner join utilizzo
on ricambio.codice = utilizzo.codiceRicambio
group by codiceRicambio, nome
having count(codiceRicambio) > 1
Esempio: restituire i dati dei clienti (nome, cognome) che hanno richiesto almeno un intervento
select distinct nome, cognome