Sei sulla pagina 1di 5

SQL

LINGUAGGIO SQL

Structured Query Language (Linguaggio per interrogazioni strutturate).


presentato come standard assoluto di accesso ad un DBMS. Ogni
DBMS deve essere compatibile con i comandi SQL.

I comandi SQL realizzano delle query, parola usata per indicare sia una
azione di interrogazione del database, sia il risultato stesso
dell‟interrogazione.

Una query consente di ricercare delle informazioni all'interno del


database,informazioni che possono appartenere alla stessa tabella
oppure a più tabelle diverse.

Una query produce un risultato tabellare detto recordset, cioè un


insieme di record virtuali, non fisicamente raggruppati all'interno del
database.

Il DBMS, in corrispondenza della query, restituisce in realtà una serie di


puntatori alle informazioni reali memorizzate sul disco, che l'utente vede
come una nuova tabella utilizzabile al pari delle tabelle fisiche.

Un recordset può coincidere con una intera tabella fisica, con una
porzione di una
tabella, oppure con un insieme di dati provenienti da tabelle diverse in
relazione fra loro.

Access ha al suo interno un apposito editor SQL per la scrittura delle


query direttamente in linguaggio SQL.
Dispone inoltre di un ambiente grafico per la realizzazione di query che
verranno automaticamente tradotte in linguaggio SQL.
ISTRUZIONI FORM E SELECT

L'istruzione SELECT …. FROM costituisce la base per tutte le


interrogazioni SQL. All'interno dell'istruzione SELECT …. FROM, si
possono utilizzare moltissime clausole tutte opzionali: La sintassi è la
seguente:
SELECT [Nomi dei campi da visualizzare]
FROM [Nomi delle Tabelle]
WHERE [condizione di filtro sulle righe]
[GROUP BY] [
HAVING]
[ORDER BY]

Dopo il select occorre indicare il nome dei campi da estrarre. Dopo il


form, occorre indicare le tabelle da cui estrarre. Se ci si dimentica del
punto virgola finale, esso verrà automaticamente aggiunto dal DBMS di
Access.
Select Nome
From Piloti;
Restituisce l'elenco completo dei nomi di tutti i piloti. Se un pilota
compare 2 volte, verrà restituito 2 volte.

Si possono estrarre più campi contemporaneamente, anche in modo


calcolato. Il Quarto campo rappresenta il prezzo scontato del 15%.
L‟ultimo campo rappresenta il costo totale di tutti i dischi di quel tipo a
magazzino.
Select Titolo, Prezzo, Qta, Prezzo * 0,85 / 100, Prezzo * Qta
From Dischi;

Se si vogliono estrarre tutti i campi si può scrivere Select * oppure From


Piloti; Restituisce l'intera tabella Piloti. Per i nomi dei campi si possono
utilizzare anche degli spazi. In tal caso il nome dovrà essere
obbligatoriamente racchiuso fra parentesi quadre. Es [Data di Nascita].
Access, per sicurezza, aggiunge le parentesi quadre a qualsiasi campo.
LA CLAUSOLA WHERE
La clausola WHERE deve essere seguita da un'espressione che
specifica un criterio di selezione dei record, utilizzando un operatore
logico che può essere uno dei seguenti:
= > < >= <= <> BETWEEN LIKE IN
Più condizioni possono essere impostate contemporaneamente
mediante gli operatori AND, OR, NOT Alla sinistra dell'operatore logico
si indica il nome di un campo e a destra l'espressione da soddisfare.

SELECT Nome
FROM Squadre
WHERE Pneumatici = „Michelin‟

Per le stringhe si possono utilizzare indifferentemente le virgolette


doppie oppure le virgolette semplici che sono preferibili quando la
query viene scritta all'interno di un linguaggio host come VB. Se il criterio
prevede l'uso di una data, questa va scritta racchiudendo fra i caratteri
cancelletto (#). Occorre però fare attenzione che mentre in Access le
date si scrivono secondo la convenzione italiana (giorno/mese/anno), in
SQL devono essere scritte secondo la convenzione americana
(mese/giorno/anno), indipendentemente dall‟impostazione predefinita
della macchina su cui si sta lavorando.

Esempio Elenco dei circuiti su cui si deve ancora correre.

SELECT Nome
FROM Circuiti WHERE Data > #09/20/03#; oppure WHERE Data > #09/20/03
10:20:35#; (# tassativo !)

Per ricercare invece le sole squadre italiani con pneumatici Michelin


SELECT Nome FROM Squadre WHERE CodiceNazione=14 AND
Pneumatici = „Michelin‟;
PREDICATO DISTINCT
SELECT DISTINCT Motore
FROM Squadre;

Dal momento che più squadre possono avere lo stesso motore, il


predicato DISTINCT fa sì che ogni motore compaia una unica volta
all'interno del risultato. Il predicato ALL fa sì che il motore venga ripetuto
per ogni ricorrenza trovata. Rappresenta il default per cui normalmente
non viene usato.
SELECT DISTINCT Motore,
Pneumatici …………………
Agisce a livello di record, cioè seleziona i record differenti rispetto al
valore di motore / pneumatici.

PREDICATO AS
La query restituisce una tabella virtuale. Ad ogni colonna della tabella,
se non ci sono indicazioni specifiche, viene assegnato il nome del
campo estratto. Questo nome può essere cambiato a piacere mediante
la clausola AS. Questa assegnazione diventa obbligatoria nel caso di
campi calcolati oppure nel caso di campi con lo stesso nome
provenienti da tabelle differenti.

SELECT Motore As ElencoMotori FROM Squadre;


SELECT nFattura, Importo, Importo * 0.20 As Iva
FROM Fatture;
SELECT Nome & " " & Cognome AS Dipendente FROM …….

Produce in uscita un unico campo “Dipendente” dato dall'unione dei


campi Nome e Cognome.
AS può essere utilizzato anche come alias delle tabelle all‟interno del
FROM (per nomi troppo lunghi, o soprattutto nel caso di utilizzi multipli
sulla stessa tabella (nazione del pilota + nazione della squadra).
CLAUSOLA ORDER BY
Se non si specifica nessun criterio di ordinamento, SQL restituisce i dati
nell'ordine con cui sono stati inseriti all'interno dei database, cioè
casuale (uno dei cardini del modello relazionale è il non ordinamento dei
dati). Mediante la clausola ORDER BY si può eseguire un ordinamento
dei record estratti:
ORDER BY Risultati. Posizione ASC / DESC;
ASC (che è il default per cui può essere omesso), indica un ordinamento
crescente dal più piccolo al più grande.
DESC indica un ordinamento decrescente dal più grande al più piccolo.

La clausola ORDER BY consente anche l'ordinamento su più campi,


scrivendo semplicemente i nomi dei campi seguiti da ASC o DESC e
separati da virgole.

I record vengono ordinati sulla base del primo campo elencato. In caso
di valori uguali in quel campo vengono ordinati sulla base del secondo
campo e così via. Non consente l'ordinamento su un campo di tipo
MEMO (nel qual caso viene segnalato un errore).
ORDER BY Campo1 DESC, Campo2 ASC;

Potrebbero piacerti anche