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.

 

19.2  -  Introduzione

 

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.

 

19.3  -  Query SQL

 

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)

UPDATE : Aggiorna i dati presenti

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.

 

19.4  -  Il comando Select

 

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

 

19.5  -  Il comando Where

 

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

 

19.6  -  Operatori

 

=  : 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

 

19.7  -  Like

 

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

 

19.8  -  I comandi And e Or

 

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

 

Utilizzo di AND

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

 

Utilizzo di OR

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

 

Utilizzo combinato di AND e OR

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

 

19.10  -  Il comando Distinct

 

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

 

19.11  -  Il comando Order by

 

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

 

19.12  -  Il comando Count

 

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.

 

19.13  -  Il comando Max

 

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

 

19.14  -  Il comando Min

 

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

 

19.15  -  Il comando Avg

 

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

 

19.16  -  Il comando Sum

 

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

 

Attenzione: nella realtà di Excel, il nome del database, che nell’esempio sopra esposto è l’archivio “anagrafica”, deve essere integrato anche dalla posizione del db sul disco rigido. Quindi, nel caso di chi vi scrive, avendo salvato il database_excel usato negli esercizi, nella cartella Document and Setting\vasta\Desktop\database_excel, all’interno del disco C, la corretta stringa SQL capace di permettere l’effettivo inserimento nell’archivio è quella contenuta nella finestra sottostante.

Come vedrete, nell’esercizio 19 viene  aggiunto un nuovo agente , il signor Walter Superbi.

 

19.18  -  Il comando Update

 

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

 

19.19  -  Il comando Delete

 

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.