Sei sulla pagina 1di 8

4.

SQL QUERY

A cura di: Celora Luca
>definizione

Fare una query significa fare delle ricerche sul
nostro database.

>strumenti da usare

SELECT //sceglie le colonne da visualizzare
FROM //indica da quali tabelle andare a prendere
i dati
WHERE //condizione di ricerca da rispettare

>join (definizione)

l'operazione di join rappresenta un'importante
operazione in quanto permette di correlare dati
rappresentati da relazioni diverse

>join (come usarlo)

Il JOIN va usato per le query su + tabelle e si usa
inserendo nella clausola di where luguaglianza
tra le chiavi primarie-esterne delle due relazioni
che voglio correlare
WHERE Nome = 'Rossi' AND
Impiegati.Dip# = Dipartimenti.Dip#;



>funzioni di gruppo (definizione)

Permettono di raggruppare tuple che si riferiscono
da un determinato attributo.

>funzioni di gruppo (come usarle)

in SELECT vanno messi davanti alle colonne:
MAX - scegli il valore massimo
MIN - scegli il valore minimo
SUM - somma tutti i valori
AVG - fai la media di tutti i valori
COUNT - conte gli elementi della colonna

Dopo WHERE fa messa lattributo per cui si
vogliono raggruppare le tuple

GROUP by attributo

>having (definizione)

possibile specificare condizioni di ricerca su
gruppi di tuple











>having (come usarlo)

Having specifica un ulteriore clausola
sullattributo per cui le tuple sono state
raggruppate.
Es.
SELECT Nome_Dip, Mansione, SUM(Stipendio),
COUNT(*), AVG(Stipendio)
FROM Dipartimenti, Impiegati
WHERE Dipartimenti.Dip#=Impiegati.Dip#
GROUP BY Nome_Dip, Mansione
HAVING COUNT(*) > 2;

//trova i gruppi che contengono solo due
impiegati.

>sottoquery (subquery)

la subquery viene usata per determinare uno o pi
valori da usare come valori di confronto in un
predicato della query esterna

>sottoquery (come usarle)

Per fare una subquery bisogna inserire un ulteriore
condizione nel where.
Se usiamo paragonare un elemento della 1 query
con un elemento della 2 query dobbiamo usare gli
alias.
SELECT Dip#, Nome, Stipendio FROM Impiegati X
WHERE Stipendio > (SELECT AVG(Stipendio)
FROM Impiegati
WHERE X.Dip# = Dip#)
//condizione: stipendi degli impiegati maggiore
dalla media degli stipendi per ogni dipartimento.

Si possono mettere prima delle subquery dei
comandi sql che indicano se la 1 condizione deve
essere verificata x
ANY almeno 1 tupla della 2 condizione
ALL per tutte le tuple della 2 condizione

>come fare le query (schema)

SELECT (scegli le colonne da visualizzare nel
risultato)
FROM (scegli le tabelle dove andare a prelevare i
file)
WHERE (indicare la condizione da verificare)
Ev. GROUP BY (raggruppa le tuple mediante
questo attributo)
Ev. HAVING (clausola sul GROUP BY)

>esercizi svolti

trovare tutti gli impiegati con lo stipendio
superiore a 2000 euro.

SELECT * FROM Impiegati
WHERE Stipendio>2000;

trovare gli ingegneri che guadagnano pi di
2000 euro.

SELECT Nome, Dip# FROM Impiegati
WHERE Stipendio>2000 AND
Mansione = 'ingegnere;

trovare gli impiegati che hanno lo stipendio
compreso tra 1100 e 1400 euro

SELECT Nome, Stipendio FROM Impiegati
WHERE Stipendio BETWEEN 1100 AND 1400;

trovare gli impiegati che hanno la lettera R in
3a posizione del nome.

SELECT Nome FROM Impiegati
WHERE Nome LIKE '_ _ R%';

trovare gli impiegati del dipartimento 30 e
ordinarli in base allo stipendio.

SELECT Stipendio, Mansione, Nome
FROM Impiegati
WHERE Dip#=30
ORDER BY Stipendio;

trovare il nome del dipartimento deove
lavora limpiegato Rossi.

SELECT Nome_Dip
FROM Impiegati, Dipartimenti
WHERE Nome = 'Rossi' AND
Impiegati.Dip# = Dipartimenti.Dip#;





si vuole determinare il massimo stipendio

SELECT MAX(Stipendio) FROM Impiegati;

si vuole raggruppare gli impiegati in base al
numero di dipartimento e si vuole
determinare il massimo stipendio di ogni
gruppo

SELECT Dip#, MAX(Stipendio)
FROM Impiegati
GROUP BY Dip#;

per ogni gruppo si vuole determinare la
somma degli stipendi, quanti impiegati
appartengono ad ogni gruppo e la media degli
stipendi

SELECT Nome_Dip, Mansione, SUM(Stipendio),
COUNT(*), AVG(Stipendio)
FROM Dipartimenti, Impiegati
WHERE Dipartimenti.Dip#=Impiegati.Dip#
GROUP BY Nome_Dip, Mansione;

supponiamo di essere interessati solo ai
gruppi che contengono almeno due impiegati

SELECT Nome_Dip, Mansione, SUM(Stipendio),
COUNT(*), AVG(Stipendio)
FROM Dipartimenti, Impiegati
WHERE Dipartimenti.Dip#=Impiegati.Dip#
GROUP BY Nome_Dip, Mansione
HAVING COUNT(*) > 2;

si vuole elencare tutti gli impiegati che hanno
la stessa mansione dell'impiegato di nome
Gianni

SELECT Nome, Mansione FROM Impiegati
WHERE Mansione = (SELECT Mansione FROM
Impiegati
WHERE Nome = 'Gianni');

si vuole elencare tutti gli impiegati che hanno
uno stipendio superiore alla media degli
stipendi di tutti gli impiegati

SELECT Nome, Stipendio FROM Impiegati
WHERE Stipendio > (SELECT AVG(Stipendio)
FROM Impiegati);

determinare lo stipendio, la mansione, il
nome e il numero di dipartimento degli
impiegati che guadagnano pi di almeno un
impiegato del dipartimento 30

SELECT Stipendio, Mansione, Nome, Dip#
FROM Impiegati WHERE Stipendio > ANY
(SELECT Stipendio FROM Impiegati
WHERE Dip#=30);

determinare i dipartimenti tali che tutti gli
impiegati di tali dipartimenti guadagnino pi
di 1000

SELECT * FROM Dipartimenti X
WHERE 1000 < ALL (SELECT Stipendio
FROM Impiegati
WHERE Dip#=X.Dip#);
determinare i dipartimenti che abbiano
almeno un impiegato che guadagna pi di
1000

SELECT * FROM Dipartimenti X
WHERE 1000 < ANY (SELECT Stipendio
FROM Impiegati
WHERE Dip#=X.Dip#)
si vuole determinare il nome di tutti gli
impiegati che non hanno alcun impiegato che
risponde loro

SELECT Nome FROM Impiegati X
WHERE NOT EXISTS (SELECT * FROM Impiegati
WHERE X.Imp# = Risponde_a);