vblogo

Programmare con Microsoft Visual Basic 6

Google
nel sito web
Introduzione
Form
Control
Oggetti
Input
Menu
Array
Visualizzazione stampa
Report
File
Errori
Clipboard
DDE
OLE
Database
Sql
Download
Bibliografia

 

 

SQL STRUCTURE QUERY LANGUAGE

SINTASSI DI SQL - Structure Query Language

Come già detto é il linguaggio che viene usato per ricercare o modificare i dati in un database. Essendo uno standard é usato praticamente da tutti i database anche se ognuno ha qualche funzionalità in più o varia la sintassi di qualche comando. Vedremo le principali e più diffuse istruzioni.

Lettura

select {colonne}
from {tabelle}
where {condizioni di ricerca}
group by {raggruppamento per colonne}
having {condizioni}
order by {colonne}

La select é l’istruzione di lettura dal database; é seguita da un o più nomi di colonne delle tabelle separati da virgole. Nella from vanno inseriti i nomi delle tabelle da usare, sempre separati da virgole. La where contiene delle istruzioni di ricerca . Group by permette di raggruppare i dati per le colonne indicate per evitare la ripetizione di righe uguali mentre order by ordina i dati in modo crescente o decrescente secondo le colonne. Ecco alcuni esempi:

select nome, cognome from clienti

estrai nome e cognome di tutti i clienti

select nome, cognome from clienti where cognome >= 'R'

estrai nome e cognome di tutti i clienti il cui cognome é maggiore o uguale a 'R'

select nome, cognome from clienti where codice > 100 and codice < 200

estrai nome e cognome di tutti i clienti il cui codice é maggiore di 100 e minore di 200

select * from clienti order by codice

estrai tutti i dati di tutti i clienti ordinati per codice

l’asterisco significa tutte le colonne della tabella Nelle colonne della select possono comparire anche delle funzioni come ad esempio:

count(*)

conta il numero di righe

sum(nomeColonna)

somma i valori della colonna indicata tra parentesi

Vediamo qualche esempio

select count(*) from clienti

estrai il numero di colonne presenti in clienti

select nome,count(*) from clienti group by nome

estrai il nome dei clienti e per ognuno quante volte é presente nella tabella.

La group by qui ha l’effetto di far raggruppare i nomi uguali

select codiceCliente,sum(valore) from ordini

restituisce il valore degli ordini fatti da tutti i clienti In una select possono comparire anche delle colonne che sono derivate da altre, come ad esempio il valore di una riga d’ordine é dato dalla moltiplicazione tra quantità e prezzo. Oppure rappresenta l’unione tra 2 o più colonne stringa come l’unione tra nom e e cognome.

select prezzo * quantita from ordini

valore riga ordine

select nome + cognome from clienti

unione di nome e cognome

Le istruzioni che possono comparire nella where sono: confronto tra 2 colonne o tra colonna e una costante, con i simboli di maggiore, minore uguale, con uso di and, or e not come in visual basic. Esempio:

a > b

a maggior di b

quantita <= 10

quantita minore uguale 10

quantita > 10 and quantita < 15

quantita maggiore 10 e minore di 15

b = 8 or b = 17

b uguale a 8 o b uguale 17

c > 'as' and not (b = 17)

c maggiore di 'as' e b non uguale a 17

L’espressione: quantita >= 10 and quantita <= 15 si può scrivere anche come quantita between 10 and 15 L’espressione: b = 8 or b = 17 or b = 25 si può scrivere meglio come:

b in (8,17,25)

L’istruzione like permette di ricerca un valore all’inizio, alla fine o contenuto nella colonna. Esempio:

nome like 'b%'

nome che comincia per b

nome like '%b'

nome che finisce per b

nome like '%b%'

nome che contiene una b La parola

null assume un ruolo particolare in sql; oltre ad indicare un valore nullo richiede una sintassi tutta sua, con l’uso della parola is. Esempio:

nome is null

nome uguale a null

cognome not is null

cognome non uguale a null L'istruzione

exists permette di inserire una condizione di ricerca basata sul risultato di un’altra select. Esempio:

select nome from clienti
where exists (select * from ordini where ordini.codice = clienti.codice)

significa estrai tutti nomi dalla tabella clienti per i quali il codice cliente é uguale allo stesso nella tabella ordini; in pratica estrae tutti nomi dei clienti che hanno ordini. Le parentesi dopo la exists stanno a significare che si attende un risult ato dalla select di vero o falso, di esistenza di almeno un valore che soddisfa la select racchiusa) La group by serve per raggruppare il risultato di una select nelle colonne indicate: Esempio:

select codiceprodotto from ordini group by codiceprodotto

significa l’estrazione di tutti i codici prodotto che sono stati ordinati. Se avessi scritto

select codiceprodotto from ordini

avrei avuto la stessa cosa ma anche la duplicazione dei codice prodotto; in pratica se un prodotto fosse stato ordinato 20 volte, sarebbe comparso 20 volte invece di una sola volta usando il group by . La having serve per compiere operazioni di selezione su raggruppamenti. Esempio:

select codiceprodotto,sum(quantita)
from ordini group by ordini having sum(quantita) > 25

estrae tutti i codici prodotto e quantità totale dagli ordini quando il totale quantità supera 25, estrae cioé tutti quei prodotti che sono stati ordinati più di 25 volte. Non si può fare la selezione nella where perché i test sono fatti per ogni riga, men tre nella having i test sono fatti al livello di raggruppamento stabilito nella group by. Order by ordina i dati di uscita per le colonne indicate: é possibile sostituire il nome di colonna con un numero che corrisponde alla posizione di una colonna nella select ottenendo la possibilità di ordinare anche per colonne che derivano da altre colonne o son o il risultato di funzioni o operazioni. Esempio:

select codiceprodotto,sum(quantita) from ordini order by 2

codice prodotto e quantita totali degli ordini sono ordinate per quantità totali: in pratica é l’elenco dei prodotti più ordinati. Le istruzioni asc e desc poste dopo ogni colonna della order by, indicano se l’ordinamento va fatto in modo crescente o decrescente. Nella from quando compaiono più tabelle entra in gioco la join, ovvero l’operazione che mette in relazione più tabelle tra loro. La sintassi che si usa varia da database a database, tutti però alla fine si riconducono agli stessi modelli di join che sono le inner join e le outer join. Supponiamo di volere la lista con nome e cognome dei clienti che hanno fatto ordini. Dal momento che la tabella ordini non ha ne’ nome ne’ cognome dei clienti ma solo il codice cliente, dovrò estarre tutti gli ordini e per ognuno di questi vedere se il codice cliente é presente nella tabella clienti: se é presente stampo nome e cognome. Questo é un esempio di inner join: in lista mi compariranno quei clienti che sono presenti sia nella tabella clienti sia negli ordini. La sintassi sql potrebbe essere questa:

select clienti.nome,clienti.cognome from clienti,ordini
where clienti.codice = ordine.codice

Se invece volessi la lista dei clienti con nome, cognome e valore totale degli ordini fatti, potrei usare la sintassi di prima aggiungendo la colonna valore:

select clienti.nome,clienti.cognome,sum(ordini.valore)
from clienti,ordini
where clienti.codice = ordine.codice
group by clienti.nome,clienti.cognome

ma così non comparirebbero i clienti che non hanno fatto ordini (la group by serve evitare che un cliente compaia più volte se ha fatto più ordini); questa sintassi risolve il problema:

select clienti.nome,clienti.cognome,sum(ordini.valore)
from clienti,ordini
where clienti.codice *= ordine.codice
group by clienti.nome,clienti.cognome

dove l’unica differenza sta nell’asterisco posto prima dell’uguale e sta ad indicare che verranno estratti comunque tutti i clienti anche se non presenti negli ordini. Questa é un outer join che consiste quindi nell’estrarre sempre tutte le righe di una de lle 2 tabelle messe in join, aggiungendo i valori della seconda tabella quando presenti. La sintassi nelle join varia a seconda del database.

 

Inserimento

Per inserire una nuova riga in una tabella si usa l’istruzione insert.

INSERT into nomeTabella (elenco colonne) VALUE (valori colonne)

Le colonne da inserire sono quelle della tabella, possono essere in qualsiasi ordine e non é necessario inserirle tutte, salvo che nella definizione della tabella una colonna non sia stata indicata come necessaria. I valori delle colonne devono essere inse riti nelle stesso ordine delle colonne, possono essere anche risultati di operazioni tra costanti o tra colonne della stessa tabella. Di Insert esistono numerose altre varianti con le quali é possibile inserire una riga leggendo i valori da un’altra tabell a, o da un’altra tabella con l’aggiunta o la modifica di valori e colonne: purtroppo tali varianti dipendono dal tipo di database usato. Esempio:

insert into clienti (nome,cognome,indirizzo)
value (“mario”,”rossi”,”via roma 43”)

inserisce nei cliente una riga con nome = “mario”, cognome = “rossi”, indirizzo = “via roma 43”.

 

Modifica

Per la modifica si usa update

update nomeTabella
SET nomecolonna = valore colonna
, nomecolonna = valore colonna,,,,
where condizioni

NomeTabella é il nome della tabella da modificare; dopo l’istruzione set vanno indicate le colonne da modificare con i relativi valori che possono essere costanti, risultati di operazioni tra costanti o tra altre colonne o addirittura risultati di select d i ricerca. Si possono usare delle condizioni come nella where della select per parzializzare la modifica a certe righe della tabella. Esempio:

update ordini set quantita = 0 where codicecliente = 256

mette quantita zero nelle righe ordine del cliente 256

 

Cancellazione

Per cancellare una o più righe si usa delete

delete nometabella where condizioni

dalla sintassi molto semplice perché richiede solo il nome della tabella é opzionalmente delle condizioni di ricerca uguali a quelle della select. Esempio:

delete ordini where quantita = 0

cancella tutti gli ordini con quantità uguale a zero

 

DataRegion

Copyright @ 2007 Vince