|
|
L'SQL (Structured Query Language) è il linguaggio standard per la manipolazione dei db su qualsiasi DBMS (tipo Access).
Qui ci limitiamo nel fornire una
breve descrizione dei principali comandi SQL.
Con l'SQL è possibile creare una tabella, modificarne la struttura o
cancellarla, effettuare ricerche, inserire nuovi dati, modificare o cancellare
dati esistenti.
E' possibile mettere in relazione due o più tabelle in funzione della struttura
delle tabelle e delle esigenze. l'SQL è un linguaggio molto sem 717h73h plice che si
avvicina in maniera impressionante al linguaggio umano e lo stesso utilizzo di
un DBMS non è di particolare complessità, la difficoltà di essere un buon progettista di db è quella di avere
conoscenza di cosa vuol dire gestire e
progettare un db e per questo diventa indispensabile la conoscenza dei modelli
relazionali.
Gli operatori messi a disposizione dall’SQL sono:
operatori di confronto che servono a determinare uguaglianze e disuguaglianze tra valori e ad effettuare ricerche all'interno dei dati:
uguaglianza tra due valori
LIKE somiglianza tra due valori
< un valore è minore di un altro
> un valore è maggiore di un altro
<= un valore è minore o uguale di un altro
>= un valore è maggiore o uguale di un altro
<> due valori sono diversi tra loro
BETWEEN un valore compreso tra due valori
operatori aritmetici che effettuano calcoli :peratore Descrizione
addizione
sottrazione
moltiplicazione
divisione
l'unico operatore condizionale di
SQL è WHERE e serve a definire criteri di ricerca mirati.
Gli operatori logici di SQL sono AND (E) e OR (O,
OPPURE). And risulta vero se entrambe le condizioni
sono vere, Or restituisce il valore vero se almeno una delle due condizioni è
vera.
I tipi di dato messi a disposizione da Access per l'SQL sono i seguenti:
Tipo Access Descrizione
AutoIncrement Contatore, si incrementa automaticamente di una unità quando viene aggiunto un record e non rigenera mai un numero quando un record viene cancellato
Text Testo Testuale, accetta fino a 255 caratteri
Memo Memo Testuale, accetta diverse migliaia di caratteri Integer Numerico numeri interi
Float Numerico numeri a precisione singola
Double Numerico numeri a precisione doppia
Byte Numerico numeri interi ma occupa meno memoria di un Integer
Currency Valuta Formatta un numero nel formato della valuta selezionata (£, €, $, ecc...)
DateTime Data/ora Imposta vari format (numerici e/o alfanumerici) per la data e l'ora
Bit Si/No Booleano, restituisce True o False
Vediamo ora in dettaglio alcuni, tra i basilari, comandi SQL.
CREARE UNA TABELLA:
La sintassi per la creazione di una tabella è la seguente:
CREATE TABLE nometabella
(nomecampo1 tipocampo1,
nomecampo2, tipocampo2,
Esempio: creiamo le tabelle Corsi e Studenti del seguente modello relazionale:
Corsi (codicecorso , nome, docente, numeroore)
Studenti (matricola, nome, cognome, età, codCorso)
Le due tabelle hanno ciascuna una chiave primaria ma Studenti riceve la chiave esterna da Corsi allora avremo:
CREATE TABLE Corsi
(codicecorso integer not null PRIMARY KEY,
nome text,
docente text,
numeroore integer);
CREATE TABLE Studenti
(matricola integer not null PRIMARY KEY,)
nome text,
cognome text,
età integer,
codCorso integer REFERENCE Corsi(codicecorso));
MODIFICARE LA STRUTTURA DI UNA TABELLA
Per modificare la struttura di una tabella, per esempio aggiungere un campo,
si usa:
ALTER TABLE nometabella ADD nomecampo tipocampo;
Ad esempio: supponiamo di voler aggiungere il campo classe di tipo text alla tabella Studenti:
ALTER TABLE Studenti
ADD classe text;
Per modificare il tipo di un campo, per esempio classe da tipo text a tipo memo:
ALTER TABLE Studenti MODIFY classe Memo;
Per cancellare un campo, per esempio eliminare il campo classe:
ALTER TABLE Studenti DROP classe
CANCELLARE UNA TABELLA
Per cancellare una tabella si usa:
DROP TABLE nometabella;
Ovviamente trattasi di una cancellazione fisica quindi attenzione!
INSERIRE DATI IN UNA TABELLA
Per inserire dati (cioè istanze) in una tabella si usa:
INSERT INTO nometabella (elenco campi)
VALUES (‘ elenco valori’);
Ad esempio, per inserire una istanza nella tabella Corsi farò:
INSERT
INTO Corsi (codicecorso, nome, docente, numeroore)
VALUES (‘3’,’patentino’,’Rossi Paolo’,’30’)
AGGIORNARE DATI DI UNA TABELLA
Per aggiornare i dati di una tabella si utilizza l'istruzione:
UPDATE nometabella
SET nomecampo = ‘valore’ (o formula di ricalcolo)
WHERE condizione;
Ad esempio, supponiamo di voler modificare l’età dello studente Marco Rosi da 65 a 25 perchè inserita erroneamente, farò:
UPDATE Studenti
SET età = 25
WHERE nome=”Marco” and cognome=”Rosi”;
Altro esempio, questa volta con utilizzo di una formula: voglio modificare le ore di tutti i corsi incrementandole del 10%, farò:
UPDATE Corsi
SET numeroore = numeroore * 1,10
CANCELLAZIONE DATI
Per cancellare I dati da una tabella si usa il commando:
DELETE elenco campi da cancellare
FROM nometabella
WHERE condizione;
Ad esempio, supponiamo di voler cancellare dalla tabella Studenti l’istanza Marco Rosi, farò:
DELETE *
FROM Studenti
WHERE nome=”Marco” AND Cognome=”Rosi”
(Utilizzare questo comando con attenzione per evitare perdita di dati non voluta)
INTERROGAZIONI DI UN DB
Vediamo ora con quali istruzioni si interroga un db.
L’istruzione da utilizzare è:
SELECT nomi campi da visualizzare
FROM nome tabella
WHERE condizione;
Il Where (cioè l’espressione della condizione di ricerca) potrebbe non esserci nel caso si facesse una proiezione e non una selezione.
Vediamo alcuni esempi.
Supponiamo di volere l’elenco di tutti gli studenti con indicazione del nome e del cognome. L’istruzione sarà:
SELECT nome, cognome
FROM Studenti
Questa è una proiezione (isolo solo alcune colonne della tabella d’origine) quindi non è presente il “where”, cioè non c’è nessun criterio di ricerca.
Se volevo l’elenco di tutti gli studenti visualizzando tutte le informazioni possibili, cioè tutte quelle della tabella, allora potevo utilizzare:
SELECT matricola, nome, cognome, età, codicecorso
FROM Studenti
Oppure più semplicemente:
SELECT Studenti.*
FROM Studenti
In sostanza il simbolo ‘*’ sostituisce l’elenco di tutti i campi della tabella.
Supponiamo ora di volere l’elenco di tutti gli studenti, con indicazione di nome e cognome, della classe 5 a Inf. Avrò:
SELECT nome, cognome
FROM Studenti
WHERE classe=”5 a Inf”;
In questo caso si tratta di una selezione (voglio isolare alcune righe della tabella d’origine e precisamente quelle che soddisfano il criterio classe = 5 a Inf. )
Precisiamo che effettuando una ricerca in funzione di un dato di tipo numerico non dobbiamo utilizzare gli apici per racchiudere il valore.
Volendo possiamo inserire anche più
condizioni, utilizzando gli operatori logici, supponiamo ad esempio di
volere l’elenco con indicazione di nome e cognome di tutti gli studenti della 5
a Inf che hanno età inferiore a 45 anni:
SELECT nome, cognome
FROM Studenti
WHERE classe=5 a Inf AND età<45
Uno tra gli operatori più importanti è l’operatore LIKE. Like, in alcuni casi, può risultare piuttosto utile quando ad esempio si vuole impostare la ricerca su una stringa di cui per esempio non si conosce l’intero contenuto.
Ad esempio: voglio conoscere il nome, il cognome e la classe dello studente il cui cognome inizia per “Ma.....”:
SELECT nome, cognome, classe
FROM Studenti
WHERE cognome LIKE ‘Ma*’;
Naturalmente rivestono un ruolo determinante anche i caratteri jolly (*).
Altro operatore importante è il Between, ad esempio se voglio trovare nome cognome di tutti gli studenti la cui età è compresa tra 35 e 45 anni farò:
SELECT nome, cognome
FROM Studenti
WHERE età BETWEEN 35 AND 45;
(Viene usato moltissimo per i criteri impostati sulle date).
Fin qui selezioni che hanno ad oggetto una sola tabella.
Cosa succede se vengono coinvolte più tabelle?
Supponiamo per esempio di volere l’elenco degli studenti con nome e cognome del corso tenuto dal docente Paolo Rossi. In questo caso alcune informazioni provengono dalla tabella Studenti (nome e cognome) ma altre (docente) su cui imposterò la condizione provengono dalla tabella Corsi.
In questo caso avrò:
SELECT nome, cognome
FROM Studenti, Corsi
WHERE docente =”Paolo Rossi”
And CodCorso=codicecorso;
Si noti quanto segue:
- dopo Select sono elencati i campi che voglio visualizzare,
- dopo From sono elencate le tabelle coinvolte,
- nel where ritrovo due condizioni, la prima è quella di ricerca vera e propria, la seconda è quella che esprime la relazione tra le due tabelle (cioè l’uguaglianza della chiave primaria di Corsi e della chiave esterna su Studenti).
Una scrittura alternativa, ma forse più complessa, è la seguente:
SELECT nome, cognome
FROM Corsi INNER JOIN Studenti ON codicecorso=CodCorso
WHERE docente=”Paolo Rossi”;
ALCUNE FUNZIONALITA’
Tra le più importanti troviamo:
ORDER BY che permette di ordinare,
GROUP BY che permette di raggruppare.
Ad esempio supponiamo di volere l’elenco di tutti gli studenti (con indicazione di nome e cognome) ordinato per cognome:
SELECT nome, cognome
FROM studenti
ORDER BY cognome;
Ad esempio, supponiamo di volere l’elenco degli studenti (con indicazione di nome e cognome) raggruppati per classe:
SELECT nome, cognome
FROM studenti
GROUP BY classe;
FUNZIONI DI AGGREGAZIONE
Di particolare importanza risultano essere le funzioni di aggregazione.
Le funzioni di aggregazioni sono funzioni standard native di SQL che permettono di ottenere valori numerici e/o effettuare calcoli in funzione di query specifiche. Di seguito l'elenco delle funzioni di aggregazione di SQL :
AVG() Restituisce la media tra due valori specificati
COUNT() Restituisce un intero che indica il numero di record trovati
MAX() Restituisce il valore massimo tra due valori
MIN() Restituisce il valore minimo tra due valori
SUM() Restituisce la somma tra più record dello stesso campo
Facciamo subito qualche esempio:
voglio conoscere l’età media dei miei studenti.
SELECT AVG(età) AS età media
FROM Studenti;
nell’esempio si noti anche l’uso di un alias (mediante AS) assegnato al campo che contiene il
risultato cercato.
voglio conoscere l’età media degli studenti della 5 a Inf.
Per quanto visto fino ad ora potremmo scrivere:
SELECT AVG(età) AS età media
FROM Studenti
WHERE classe = “5 a Inf”
In realtà però quando sono usate delle funzioni il Where viene sostituito dal raggruppamento e dall’Having e quindi l’espressione corretta diventa:
SELECT AVG(età) AS età media
FROM Studenti
GROUP BY classe
HAVING classe = “5 a Inf”;
voglio sapere quanti studenti frequentano la classe 5 a Inf:
SELECT Count(matricola) AS Numero Studenti
FROM Studenti
GROUP BY classe
HAVING classe = “5 a Inf”;
In questo caso è stata usata la funzione conteggio Count che restituisce il numero di record trovati che soddisfano la condizione indicata (in genere questa funzione si usa applicandola al campo chiave di una tabella).
Privacy |
Articolo informazione
Commentare questo articolo:Non sei registratoDevi essere registrato per commentare ISCRIVITI |
Copiare il codice nella pagina web del tuo sito. |
Copyright InfTub.com 2025