Panoramica su SQL

Proiezione

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

Ridenominazione di colonne e tabelle (Alias)

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

Campi calcolati

SELECT espressione AS NomeColonna FROM NomeTabella
espressione può essere una combinazione qualunque delle 4 operazioni applicata alle colonne della tabella

Ordinamenti

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

Statistiche

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

Raggruppamenti

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

Selezione

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

Parametri

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 @.

Clausola HAVING

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

Congiunzione

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

Left Join

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

Right Join

SELECT ListaColonne FROM [NomeTabella1 RIGHT OUTER JOIN NomeTabella2 ON CondizioneCongiunzione]
La sintassi è analoga al left join

Outer Join completo

SELECT ListaColonne FROM [NomeTabella1 FULL OUTER JOIN NomeTabella2 ON CondizioneCongiunzione]
La sintassi è analoga ai due precedenti
Quest'ultima forma non esiste in mySQL

Natural Join

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

Subquery

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