Descrizione
SQL: Structured Query Language
Obiettivi della lezione
Introduzione ai comandi del linguaggio Structured Query Language
Indice lezione
Lezione 19 - Foglio Elettronico
19.1
SQL: La lingua per
i database;
19.2
Introduzione;
19.3
Query SQL;
19.4
Il comando Select;
19.5
Il comando Where;
19.6
Operatori;
19.7
Like;
19.8
I comandi And e Or;
19.9
Il comando
Between... And;
19.10 Il comando Distinct;
19.11 Il comando Order by;
19.12 Il comando Count;
19.13 Il comando Max;
19.14 Il comando Min;
19.15 Il comando Avg;
19.16 Il comando Sum;
19.17 Il comando Insert Into;
19.18 Il comando Update;
19.19 Il comando Delete.
Dati sulla lezione
|
Versione: |
v1.0 |
|
Tempi: |
1 ½ ora / 90 minuti |
|
Data svolgimento lezione: |
14 Maggio 2003 |
|
Autore dei contenuti: |
Vastapane Marco Attilio – Giuliano Luca |
|
Autore materiali didattici: |
Togni Francesca |
La Teoria
19.1 - SQL: La lingua per i database
La storia di SQL, che si pronuncia facendo lo spelling inglese delle lettere che lo compongono, e quindi "ess-chiu-el" e non "siquel" come si sente spesso, inizia nel 1974 con la definizione da parte di Donald Chamberlin e di altre persone che lavoravano presso i laboratori di ricerca dell'IBM di un linguaggio per la specificazione delle caratteristiche dei database che adottavano il modello relazionale. Questo linguaggio si chiamava SEQUEL (Structured English Query Language) e venne implementato in un prototipo chiamato SEQUEL-XRM fra il 1974 e il 1975. Le sperimentazioni con tale prototipo portarono fra il 1976 ed il 1977 ad una revisione del linguaggio (SEQUEL/2), che in seguito cambiò nome per motivi legali, diventando SQL. Il prototipo (System R) basato su questo linguaggio venne adottato ed utilizzato internamente da IBM e da alcuni sui clienti scelti. Grazie al successo di questo sistema, che non era ancora commercializzato, anche altre compagnie iniziarono a sviluppare i loro prodotti relazionali basati su SQL. A partire dal 1981 IBM cominciò a rilasciare i suoi prodotti relazionali e nel 1983 cominciò a vendere DB2. Nel corso degli anni ottanta numerose compagnie (ad esempio Oracle e Sybase, solo per citarne alcuni) commercializzarono prodotti basati su SQL, che divenne lo standard industriale di fatto per quanto riguarda i database relazionali.
Nel 1986 l'ANSI adottò SQL (sostanzialmente adottò il dialetto SQL di IBM) come standard per i linguaggi relazionali e nel 1987 esso diventò anche standard ISO. Questa versione dello standard va sotto il nome di SQL/86. Negli anni successivi esso ha subito varie revisioni che hanno portato prima alla versione SQL/89 e successivamente alla attuale SQL/92.
Il fatto di avere uno standard definito per un linguaggio per database relazionali, apre potenzialmente la strada alla intercomunicabilità fra tutti i prodotti che si basano su di esso. Dal punto di vista pratico purtroppo le cose andarono differentemente. Infatti in generale ogni produttore adotta ed implementa nel proprio database solo il cuore del linguaggio SQL (il cosiddetto Entry level o al massimo l'Intermediate level), estendendolo in maniera proprietaria a seconda della propria visione del mondo dei database.
Attualmente è in corso un processo di revisione del linguaggio da parte dei comitati ANSI e ISO, che dovrebbe portare alla definizione di ciò che al momento è noto come SQL3. Le caratteristiche principali di questa nuova incarnazione di SQL dovrebbero essere la sua trasformazione in un linguaggio stand-alone (mentre ora viene usato come linguaggio ospitato in altri linguaggi) e l'introduzione di nuovi tipi di dato più complessi per permettere, ad esempio, il trattamento di dati multimediali.
SQL sta per Structured Query Language, e permette di inserire, modificare e cancellare dei dati da database, ma permette anche di prelevarli, elaborarli e visualizzarli in diversi modi, nonché i effettuare varie operazioni (creazione e cancellazione database).
Esistono corposi manuali su SQL, ma qui verranno illustrati tutti (e solo) i comandi più utilizzati ed utili. Per una lettura più veloce e facilmente comprensibile illustriamo i termini principali che incontreremo in questa guida.
Database
I Database sono formati da Tabelle, ognuna con un proprio nome. Di solito si lavora in ambienti relazionali, quindi le tabelle devono essere collegate tramite campi che contengono valori identici. In questa sede però non ci occuperemo delle relazioni, ma lavoreremo su una tabella singola. Nel nostro caso, andremo a considerare tabella il foglio Agenti di Excel.
Le tabelle organizzano i dati in righe e colonne. Le righe, definite solitamente come Record o Osservazione, sono a loro volta organizzate e gestite in Colonne (o Campi, Variabili, Elementi). Per accedere a un dato bisogna identificare le colonne di interesse. Qualcosa di diverso, dunque, da un foglio Excel che ha coordinate assolute (numeri e lettere) che possono puntare a un dato in qualsiasi punto.
Una interrogazione, cioè una Query SQL ha una sintassi molto semplice, del tipo:
SELECT [colonne] FROM [tabella], che tradotto in italiano ha come significato : seleziona le colonne relative ad un campo dalla tabella specificata.
Ciò che è contenuto tra parentesi sono dei dati variabili: saranno il nome del campo ed ovviamente il nome della tabella.
Da notare che per estrarre tutte le colonne dalla tabella è sufficiente utilizzare il simbolo * ; infatti, anche quando dobbiamo ricercare un file di Excel sul nostro computer, non ne ricordano il nome, digitiamo nell’apposito pannello di ricerca : *.xls che vuol dire “ tutto ciò che ha estensione .xls”
Quindi per visualizzare tutti i record della tabella, vale a dire, l’intera tabella sarà sufficiente scrivere il comando Select * from nome_tabella .
E’ possibile manipolare i dati attraverso quattro comandi:
SELECT : Sceglie
le colonne
INSERT : Aggiunge nuovi record (dati)
DELETE : Cancella
i dati presenti
In queste pagine analizzeremo uno per uno i comandi e le caratteristiche di SQL per permettere un utilizzo completo o quasi dei più diffusi database in commercio.
Permette di estrarre (visualizzare) le colonne di una tabella.
Sintassi
SELECT nome_colonna FROM nome_tabella
Esempio
La tabella "anagrafica" ha questa struttura
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
31 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
Importante : si ricorda che le parole
accentate possono provocare malfunzionamenti nel programma , solamente perché è
assai facile fare degli errori di battitura :
citta’
- città –
citta
sono tre parole assolutamente differenti
tra di loro.
Da ora in poi, utilizzeremo sempre questa tabella.
SELECT nome FROM anagrafica
Seleziona il nome dalla tabella anagrafica
Risultato
|
Nome |
|
Marco |
|
Luca |
|
Sabrina |
Permette di estrarre i dati contenuti nelle colonne in base a valori presenti nelle righe
Sintassi
SELECT colonna FROM tabella WHERE colonna OPERATORE valore
Esempio
La tabella "anagrafica"
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
31 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
SELECT nome FROM anagrafica WHERE eta = 29
Seleziona il nome dalla tabella anagrafica dove eta = 29
Risultato
|
Nome |
|
Luca |
|
Sabrina |
= : uguale
< : minore
> : maggiore
<> : diverso
<= : minore o uguale
>= : maggiore o uguale
LIKE : contiene
Importante: nella clausola Where se il record deve essere uguale a del testo, allora questo deve essere incluso tra gli apici, come nell’esempio seguente.
SELECT nome FROM anagrafica WHERE citta = 'Ivrea'
Seleziona il nome dalla tabella anagrafica dove citta =
‘Ivrea’
Se il record deve essere uguale a un numero, gli apici non devono essere utilizzati.
SELECT nome FROM anagrafica WHERE eta =
29
Seleziona il nome dalla tabella anagrafica dove eta = 29
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
31 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
Like permette di ricercare nei campi (colonne) parole, numeri o parti di essi (iniziali, centrali e finali).
Per cercare nomi che iniziano per M si utilizza la seguente query:
SELECT nome FROM anagrafica WHERE nome LIKE
'm%'
Seleziona il nome dalla tabella anagrafica dove il nome
inizia per ‘m. . . . ‘
|
Nome |
|
Marco |
Per cercare nomi che finiscono per A si utilizza la seguente query:
SELECT nome FROM anagrafica WHERE nome LIKE
'%a'
Seleziona il nome dalla tabella anagrafica dove il nome
finisce per ‘. . . . a ‘
|
Nome |
|
Luca |
|
Sabrina |
Infine per cercare nomi che finiscono, iniziano o che contengono la R, si utilizza la seguente query:
SELECT nome FROM anagrafica WHERE nome LIKE
'%r%'
Seleziona il nome dalla tabella anagrafica dove il nome contiene ‘. . . . r. . . . . ‘
|
Nome |
|
Marco |
|
Sabrina |
And e Or permettono di indicare due o più condizioni di Where. L'operatore And indica che tutte le condizioni devono essere vere, mentre Or indica che ne basta una vera.
Sintassi
SELECT colonne FROM tabella WHERE colonne OPERATORE valore AND/OR WHERE colonne OPERATORE valore ...
Esempio
La tabella "anagrafica"
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
31 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
SELECT * FROM anagrafica WHERE eta = 29
AND citta = ‘Ivrea’
Seleziona tutto dalla tabella anagrafica dove eta = 29 ed anche citta = ‘Ivrea’
Risultato
|
Nome |
Cognome |
Eta |
Citta |
|
Luca |
Giulietti |
29 |
Ivrea |
SELECT * FROM anagrafica WHERE eta = 29 OR citta = ‘Ivrea’
Seleziona tutto dalla tabella anagrafica dove eta = 29 oppure citta = ‘Ivrea’
Risultato
|
Nome |
Cognome |
Eta |
Citta |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
SELECT * FROM anagrafica WHERE (nome =
'Luca' OR nome = 'Marco') AND eta = 29
Seleziona tutto dalla tabella anagrafica dove ( nome = ‘Luca’ oppure nome = ‘Marco’ ) e anche eta = 29
Risultato
|
Nome |
Cognome |
Eta |
Citta |
|
Luca |
Giulietti |
29 |
Ivrea |
19.9 - Il comando Between... And
Between ... And serve a prelevare dei dati compresi tra due valori.
Sintassi
SELECT colonne FROM tabella WHERE
record BETWEEN valore1 AND
valore2
Esempio
La tabella "anagrafica"
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
31 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
SELECT nome FROM anagrafica WHERE eta BETWEEN
15 AND 30
Seleziona il nome dalla tabella anagrafica dove eta è compresa tra 15 e 30
Risultato
|
Nome |
|
Luca |
|
Sabrina |
Distinct serve a non ripetere nei risultati lo stesso valore.
Sintassi
SELECT DISTINCT record FROM tabella
Esempio
La tabella "anagrafica"
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
31 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
SELECT DISTINCT eta FROM anagrafica
Seleziona senza ripetere gli stessi valori della colonna eta nome dalla tabella anagrafica
Risultato
|
Eta |
|
31 |
|
29 |
L'età di Sabrina e di Luca , viene ripetuta una sola volta poiché del medesimo valore; omettendo il comando Distinct, si ottiene la visualizzazione dei dati richiesti, quindi in questo caso vi è giustamente la ripetizione dei valori.
SELECT eta FROM anagrafica
|
Eta |
|
31 |
|
29 |
|
29 |
Order By viene utilizzato per visualizzare i risultati secondo un certo ordine.
Sintassi
SELECT colonne FROM tabella ORDER BY colonna
Esempio
La tabella "anagrafica"
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
31 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
SELECT eta FROM anagrafica ORDER BY
eta
Seleziona eta dalla tabella anagrafica ordinando eta
Risultato
|
Eta |
|
29 |
|
29 |
|
31 |
Sintassi
Per indicare alla query che deve ordinare in base a più di una determinata colonna, basta del semplice codice simile a :
SELECT colonna FROM tabella ORDER BY
colonna
Possiamo anche indicare di ordinare al contrario , cioè in ordine decrescente utilizzando DESC (descending) alla fine.
SELECT eta FROM anagrafica ORDER BY
eta DESC
Seleziona eta dalla tabella anagrafica ordinando eta decrescente
|
Eta |
|
31 |
|
29 |
|
29 |
COUNT è una funziona per contare i records.
Sintassi
SELECT COUNT (colonna) FROM tabella
Esempio
La tabella "anagrafica"
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
31 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
SELECT COUNT (NOMINATIVO)
FROM anagrafica
Seleziona il conteggio dei record Nominativo della tabella anagrafica
Risultato
Conta il numero di righe, records presenti:
|
ConteggioDiNominativo |
|
3 |
Per comodità, è possibile battezzare l’intestazione del campo, con un nome più adeguato, ad esempio Totale.
Nel codice SQL , inserire seguito da un nome
SELECT COUNT (NOMINATIVO) AS TOTALE FROM anagrafica
Se invece abbiamo la necessità di inserire più parole come intestazione della colonna, dovremo comprendere le parole tra apici , ad esempio ‘ Totale record ‘
Esempio 2
SELECT COUNT (Nominativo) FROM anagrafica WHERE eta < 31
Risultato
|
ConteggioDiNominativo |
|
2 |
Solamente 2 campi soddisfano il conteggio richiesto.
Max è una funziona per selezionare il record con il valore maggiore
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
31 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
Sintassi
SELECT Max(eta) FROM anagrafica
Seleziona il massimo valore di eta della tabella anagrafica
|
Max(Eta) |
|
31 |
Min è una funziona per selezionare il record con il valore minimo
SELECT Min(eta) FROM anagrafica
Seleziona il minimo valore di eta della tabella anagrafica
|
Min(Eta) |
|
29 |
Avg è una funziona per calcolare il valore medio ei record presi in esame
Sintassi
SELECT Avg(eta) FROM anagrafica
Seleziona il valore medio di eta della tabella anagrafica
|
Avg(Eta) |
|
29,67 |
Sum è una funziona per calcolare la somma dei record presi in esame
SELECT Sum(eta) FROM anagrafica
Seleziona la somma di eta della tabella anagrafica
|
Sum(Eta) |
|
89 |
19.17 - Il comando Insert Into
Insert Into viene utilizzato per inserire uno o più records nuovi.
Sintassi
INSERT INTO tabella VALUES (valore1, valore2, ...)
mentre se si vogliono inserire dei dati solo in alcune colonne:
INSERT INTO tabella (colonna1, colonna2) VALUES (valore1, valore2)
Esempio
La tabella "anagrafica"
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
31 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
INSERT INTO anagrafica VALUES ('Davide', 'Blonder', ‘27’, 'Biella')
Inserisci nella tabella anagrafica i valori ('Davide',
'Blonder', ‘27’, 'Biella')
Risultato
Sarà inserita una nuova riga con i dati:
|
Nome |
Cognome |
Eta |
Citta |
|
Davide |
Blonder |
27 |
Biella |
Come vedrete, nell’esercizio 19 viene aggiunto un nuovo agente , il signor Walter Superbi.

Update viene utilizzato per aggiornare i records.
Sintassi
UPDATE tabella SET colonna = valore WHERE colonna = valore
Esempio
La tabella "anagrafica"
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
31 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
UPDATE anagrafica SET eta = 40 WHERE cognome = 'Moscati'
Aggiorna la tabella
anagrafica al campo eta = 40 dove il
cognome = ‘Moscati’
Risultato
Sarà aggiornato il record inerente a tutti i ‘Moscati’ (in questo caso solo Marco) modificando, in questo caso, solo l'età da 31 a 40.
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
40 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
Delete viene utilizzato per cancellare uno o più records.
Sintassi
DELETE * FROM tabella WHERE colonna = valore
Esempio
La tabella "anagrafica"
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
40 |
Torino |
|
Luca |
Giulietti |
29 |
Ivrea |
|
Sabrina |
Gasoli |
29 |
Biella |
DELETE * FROM anagrafica WHERE cognome = 'Moscati'
Elimina dalla tabella anagrafica al campo cognome = 40 dove il cognome = Moscati
Risultato
Sarà cancellata la riga che contiene i dati:
|
Nome |
Cognome |
Eta |
Citta |
|
Marco |
Moscati |
40 |
Torino |
Questa funzione non è tuttavia supportata dal Microsoft Query.
Feedback
Per
chiarimenti, si prega di lasciare la domanda direttamente sul Forum della
piattaforma Maestra.