venerdì, settembre 19, 2008

Basi di Dati: SQL, SELECT

L'istruzione per leggere dati da delle tabelle é. SELECT ed ha la seguente sintassi:

SELECT [DISTINCT] Campo1 [AS
AliasCampo1], Campo2 [AS
AliasCampo2] FROM
Tabella1 AliasTabella1, Tabella2
AliasTabella2 [WHERE Condizioni] [GROUP BY
Campo1, Campo2, … [HAVING
CondizioneAggregata]] [ORDER BY Campo1 [DESC], Campo2 [DESC, …]

DISTINCT Specifica che non vanno prese le ennuple duplicate nel risultato

Nella clausola FROM é possibile anche specificare delle clausole di JOIN:

[INNER] JOIN (corrisponde a Teta JOIN

Es: FROM Tabella1 INNER JOIN Tabella2 ON Tabella1.Campo1 = Tabella2.Campo2

NATURAL JOIN

Es: FROM Tabella1 NATURAL JOIN Tabella2

RIGHT, LEFT, [FULL] OUTER JOIN: Join esterni


OPERATORI AGGREGATI

COUNT: Numero di elementi

SELECT COUNT (*) FROM -> numero di record

SELECT COUNT (DISTINCT Campo1) FROM -> numero di valori diversi assunto da Campo1


SUM: Somma di valori (es. SELECT SUM(Campo1) FROM)

MAX: Valore più alto

MIN: Valore più basso

AVG: Valore medio


GROUP BY

Raggruppa i record secondo certi valori. I campi aggregati verranno calcolati per ciascuno di quei valori.
L'esempio seguente estrae lo stipendio più basso per ogni citta:

SELECT MIN(Stipendio) FROM
Dipendenti
GROUP BY
Citta

Se uso una GROUP BY nella select posso mettere solo gli attributi del GROUP BY e le aggregazioni. Es:
Sì: SELECT SELECT Citta, MIN(Stipendio) FROM
Dipendenti
GROUP BY
Citta

No: SELECT SELECT Nome, MIN(Stipendio) FROM
Dipendenti
GROUP BY
Citta


WHERE

Esprime una condizione della query


HAVING

Permette di esprimere condizioni sui valori aggregati. Praticamente é come una WHERE effettuata dopo il raggruppamento

Es.: La query seguente filtra i dirigenti, li raggruppa per dipartimento, prende la somma degli stipenti dei dirigenti per dipartimento e ritorna solo i record la cui somma degli stipenti é maggiore di 10000

SELECT Dipartimento, SUM(Stipendio) AS Totale FROM Dipendenti WHERE Grado = 'Dirigente' HAVING SUM(Stipendio) > 10000


ORDER BY

Ordina per uno o più campi il risultato.

Si può specificare le parole chiave ASC (default) per ordine crescente oppure DESC per descrescente.

Se si specificano più campi (separati da virgole) l'ordine sarà valutato da sinistra a destra (esattamente come ci si aspetterebbe!)

Nessun commento: