SELECT (DISTINCT/ALL)
ListaColonne FROM NomeTabella
la clausola DISTINCT è quella di default e seleziona solo le righe
diverse, con la clausola ALL si prendono anche le righe ripetute
SELECT Colonna1 AS AliasColonna, ... FROM
NomeTabella AliasTabella
La ridenominazione di tabella serve in qualche caso particolare, quella
di colonna serve a dare un titolo alla colonna o un nome a un campo
calcolato
SELECT espressione AS
NomeColonna FROM NomeTabella
espressione può essere una combinazione qualunque delle 4 operazioni
applicata alle colonne della tabella
SELECT ListaColonne FROM
NomeTabella ORDER BY NomeColonna (ASCENDING/DESCENDING)
riodina le t-ple secondo i valori delle colonne indicate (se ne
può specificare anche più di una)
N.B.: in mySql valgono le abbreviazioni ASC e DESC
SELECT funzione(NomeColonna)
FROM NomeTabella
le funzioni sono COUNT,
SUM, AVG, MAX e MIN e restituiscono
un singolo valore numerico (che quindi non può essere affiancato a
altre colonne, che invece contengono più valori). Le t-ple contenenti
valori nulli vengono ignorate
SELECT NomeColonna1,
Funzione(NomeColonna2) FROM NomeTabella GROUP BY NomeColonna1
serve a raggruppare le tuple secondo la Colonna1 calcolando la
funzione indicata su ogni gruppo.
N.B.: in mySQL è possibile affiancare al campo di
raggruppamento anche altri campi descrittivi che devono essere
associati a quest' ultimo
SELECT * FROM NomeTabella
WHERE condizione
La condizione può comprendere i normali operatori logici e di confronto
ed anche LIKE, BETWEEN, IS NULL o IS NOT NULL.
Se al posto dell' asterisco si trova una ListaColonne si avrà una
combinazione di selezione e proiezione
SELECT * FROM NomeTabella WHERE NomeColonna = NomeVariabile
le query con parametri permettono di usare delle variabili definite al
momento dell' avvio della query accanto ai nomi di colonna. Questo è
uno degli esempi più comuni, ma le variabili possono essere anche
inserite in espressioni più complesse.
Il modo di rappresentare le variabili varia a seconda del DBMS usato:
in Adabas sono precedute dai ':', in Access racchiuse tra parentesi
quadre, in mySQL sono precedute da una @.
SELECT NomeColonna1,
Funzione(NomeColonna2) FROM NomeTabella GROUP BY NomeColonna1 HAVING
condizione
Permette di inserire una condizione restrittiva sui gruppi da includere
(solo certi valori di Colonna1, o anche dell' altra colonna). In
pratica applica una selezione dopo che è stato eseguito il
raggruppamento
SELECT * FROM NomeTabella1
JOIN NomeTabella2 ON ChiaveEsterna = ChiavePrimaria
Questa è la forma classica di congiunzione che equivale all' EquiJoin.
Si tratta di un InnerJoin, cioè tutte le t-ple delle due tabelle che
non sono collegate vengono eliminate
Se non viene specificate la clausolaON si ottiene un prodotto
cartesiano.
In casi particolari può anche darsi che le due colonne su cui si
effettua il collegamento non siano la chiave primaria e la chiave
esterna, comunque il tipo dei dati deve coincidere, e vengono sempre
collegate le t-ple che contengono valori uguali
SELECT ListaColonne FROM
[NomeTabella1 LEFT OUTER JOIN NomeTabella2 ON CondizioneCongiunzione]
In ADABAS l' outer JOIN va racchiuso tra parentesi graffe e preceduto
da OJ
In mySQL la parola OUTER viene omessa
SELECT ListaColonne FROM
[NomeTabella1 RIGHT OUTER JOIN NomeTabella2 ON CondizioneCongiunzione]
La sintassi è analoga al left join
SELECT ListaColonne FROM
[NomeTabella1 FULL OUTER JOIN NomeTabella2 ON CondizioneCongiunzione]
La sintassi è analoga ai due precedenti
Quest'ultima forma non esiste in mySQL
SELECT ListaColonne FROM
NomeTabella1 NATURAL [LEFT|RIGHT OUTER] JOIN NomeTabella2
Con il natural join non è necessario usare la clausola di congiunzione:
vengono considerate tutte le colone che hanno lo stesso nome. Per
questo motivo va usato con una certa precauzione
Al posto di un valore singolo o di una variabile è
consentito usare una funzione calcolata, al posto di un nome di colonna
è consentito usare una proiezione o comunque una subquery che produca
come risultato una sola colonna, e al posto di una tabella si può
indicare una subquery che produca un risultato con più righe e più
colonne.
Non si possono usare più di 2 livelli di indentazione
![]() |
![]() |