Fondamenti di Informatica
Introduzione a SQL
Pro f. M a rco Lo mb a rd i
Concetti Introduttivi – 1/2
•
SQL (Structured Query Language) permette di
manipolare i dati, interrogare un database
relazionale e modellarne la struttura
•
È considerato uno degli standard principali per la
manipolazione dei dati in database relazionali
•
Con SQL possiamo quindi interagire con la base di
dati ed ottenere le informazioni in essa presenti
Concetti Introduttivi – 2/2
•
SQL è in grado di eseguire query (interrogazioni) al
database ed operazioni di manipolazione sul database
•
SQL soddisfa la tavola di operazioni, denominata
CRUD
CRUD
Tavola CRUD
C
REATE
• Creare nuovi database
• Creare nuove Tabelle in database esistenti
• Inserire nuovi record in tabelle
R
EAD
• Leggere e ottenere dati dal database
U
PDATE
• Aggiornare record nel database
D
ELETE
• Cancellare record dal database
CRUD
C
REATE
R
EAD
U
PDATE
Convenzioni sul Linguaggio
•
Tabella → Entità del modello E-R
•
Campo/Colonna → Attributo del modello E-R
•
Comandi scritti in MAIUSCOLO
•
SQL non fa differenza se non per i valori nei campi della tabella (entità)
•
Nomi degli oggetti (tabelle, campi, ecc.) composti da lettere, numeri e
carattere underscore (
_
)
•
Primo carattere deve essere una lettera o un underscore
Tavola CRUD
C
REATE
• Creare nuovi database
• Creare nuove Tabelle in database esistenti
• Inserire nuovi record in tabelle
R
EAD
• Leggere e ottenere dati dal database
U
PDATE
• Aggiornare record nel database
D
ELETE
• Cancellare record dal database
CRUD
C
REATE
R
EAD
U
PDATE
Creazione di una Tabella – 1/3
•
Sintassi SQL per la creazione di una tabella
CREATE TABLE nome_tabella (
nome_campo1 TIPO_CAMPO1 VINCOLI_CAMPO1,
nome_campo2 TIPO_CAMPO2 VINCOLI_CAMPO2,
.
.
.
nome_campoN TIPO_CAMPON VINCOLI_CAMPON
Principali tipi dei valori che un campo può assumere
•
Stringhe di caratteri
•
VARCHAR(N)
→ N indica la dimensione della stringa
• Esempio
• VARCHAR(20)→ Stringa di 20 caratteri
•
TEXT
•
Valori numerici
•
INT
•
FLOAT (numero in virgola mobile)
•
Date e Orari
•
DATE
•
TIME
•
TIMESTAMP
Creazione di una Tabella – 2/3
•
Esempio
CREATE TABLE studente (
matricola VARCHAR(10) PRIMARY KEY,
nome VARCHAR(20) NOT NULL,
cognome VARCHAR(20) NOT NULL,
data_nascita DATE
Creazione di una Tabella – 2/3
•
Esempio
CREATE TABLE studente (
matricola VARCHAR(10) PRIMARY KEY,
nome VARCHAR(20) NOT NULL,
cognome VARCHAR(20) NOT NULL,
data_nascita DATE
Creazione di una Tabella – 3/3
•
Esempio
•
Creazione della tabella studente (inizialmente vuota) con i
seguenti campi
•
matricola
• Tipo: Stringa di 10 caratteri (VARCHAR(10)) • Attributo Chiave (PRIMARY KEY)
•
cognome e nome
• Tipo: Stringhe di 20 caratteri (VARCHAR(20)) • Non sono ammessi valori nulli (NOT NULL)
•
data_nascita
• Tipo: Data (DATE)CREATE TABLE studente (
matricola VARCHAR(10) PRIMARY KEY, nome VARCHAR(20) NOT NULL,
cognome VARCHAR(20) NOT NULL, data_nascita DATE
Creazione di una Tabella – 3/3
•
Esempio
CREATE TABLE studente (
matricola VARCHAR(10) PRIMARY KEY, nome VARCHAR(20) NOT NULL,
cognome VARCHAR(20) NOT NULL, data_nascita DATE
);
matricola
nome
cognome
data_nascita
Tabella studente
C
REATE
• Creare nuovi database
• Creare nuove Tabelle in database esistenti
• Inserire nuovi record in tabelle
R
EAD
• Leggere e ottenere dati dal database
U
PDATE
• Aggiornare record nel database
D
ELETE
• Cancellare record dal database
Tavola CRUD
CRUD
C
REATE
R
EAD
U
PDATE
D
ELETE
Inserimento di un Record – 1/2
•
Sintassi SQL per l’inserimento di un record in una tabella
INSERT INTO nome_tabella (
nome_campo1,
nome_campo2,
...
nome_campoN
) VALUES (
valore1
valore2
...
valoreN
);
Inserimento di un Record – 2/2
•
Sintassi SQL per l’inserimento di un record in una tabella
•
Esempio
INSERT INTO studente (
matricola,
nome,
cognome,
data_nascita
) VALUES (
‘00001’,
‘Mario’,
‘Rossi’,
‘1990/04/10’
);
Inserimento di un Record – 2/2
•
Esempio
INSERT INTO studente (matricola, nome, cognome, data_nascita ) VALUES ( ‘00001’, ‘Mario’, ‘Rossi’ , ‘1990/04/10’ );matricola
nome
cognome
data_nascita
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
Esecuzione Istruzione SQL
Tavola CRUD
CRUD
U
PDATE
D
ELETE
C
REATE
• Creare nuovi database
• Creare nuove Tabelle in database esistenti
• Inserire nuovi record in tabelle
R
EAD
• Leggere e ottenere dati dal database
U
PDATE
• Aggiornare record nel database
D
ELETE
• Cancellare record dal database
C
REATE
Interrogazione – 1/4
•
Sintassi SQL per l’operazione di interrogazione (query) al database
SELECT nome_campo1, ..., nome_campoN
FROM tabella1, ..., tabellaN
WHERE condizioni;
Interrogazione – 2/4
•
SELECT
•
Specifica
le
colonne
(attributi)
che
appariranno
nel
risultato
dell’interrogazione
•
FROM
•
Specifica le tabelle su cui verrà eseguita l’interrogazione
•
WHERE [Clausola Opzionale]
•
Specifica una o più condizioni, mediante il quale i record devono essere
filtrati nei risultati dell’interrogazione
SELECT nome_campo1, ..., nome_campoN
FROM tabella1, ..., tabellaN
WHERE condizioni;
Interrogazione – 3/4
•
Esempio 1
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
00002
Giovanni
Gialli
1990/05/02
00003
Mario
Blu
1990/02/05
SELECT nome FROM studente;
Interrogazione – 3/4
•
Esempio 1
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
00002
Giovanni
Gialli
1990/05/02
00003
Mario
Blu
1990/02/05
SELECT nome FROM studente;
nome
Mario
Giovanni
Mario
Interrogazione – 3/4
•
Esempio 1
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
00002
Giovanni
Gialli
1990/05/02
00003
Mario
Blu
1990/02/05
SELECT nome FROM studente;
nome
Mario
Giovanni
Mario
Risultato dell’interrogazione
Tabella: studente
Interrogazione – 3/4
•
Esempio 2
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
00002
Giovanni
Gialli
1990/05/02
00003
Mario
Blu
1990/02/05
SELECT cognome FROM studente;
cognome
Rossi
Gialli
Blu
Interrogazione – 3/4
•
Esempio 3
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
00002
Giovanni
Gialli
1990/05/02
00003
Mario
Blu
1990/02/05
SELECT * FROM studente;
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
00002
Giovanni
Gialli
1990/05/02
Risultato dell’interrogazione
Tabella: studente
Interrogazione – 3/4
•
Esempio 3
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
00002
Giovanni
Gialli
1990/05/02
00003
Mario
Blu
1990/02/05
SELECT
*
FROM studente;
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
00002
Giovanni
Gialli
1990/05/02
Risultato dell’interrogazione
L’asterisco
*
permette di selezionare tutti gli
attributi
Interrogazione – 4/4
La Clausola WHERE – 1/20
•
La clausola WHERE può essere utilizzata per diversi scopi durante
un’interrogazione (condizioni di ricerca)
•
Comparazione
•
Vengono ricercati record, comparando due espressioni
•
Intervallo
•
Viene verificato se un valore specificato rientra in un dato intervallo
•
Parola chiave: BETWEEN
•
Pattern Matching
•
Viene verificato se una espressione corrisponde ad un pattern di stringa
specificato (esempi nelle prossime slide)
•
Parola chiave: LIKE
•
Valori NULLI
•
Viene verificato se una certa espressione restituisce un valore NULLO
Interrogazione – 4/4
La Clausola WHERE – 1/20
•
Operatori per la Comparazione
Operatore SQL
Descrizione
=
Uguaglianza (Uguale a)<>
Disuguaglianza (Diverso da)<
Minore>
Maggiore<=
Minore o UgualeInterrogazione – 4/4
La Clausola WHERE – 1/21
•
Operatori Logici
Operatore SQL
Descrizione
AND
Operatore ANDOR
Operatore ORInterrogazione – 4/4
La Clausola WHERE – 2/21
•
Esempio 4
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
00002
Giovanni
Gialli
1990/05/02
00003
Mario
Blu
1990/02/05
SELECT nome FROM studente WHERE nome = ‘Mario’;
nome
Mario
Mario
Interrogazione – 4/4
La Clausola WHERE – 3/21
•
Esempio 5
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
00002
Giovanni
Gialli
1990/05/02
00003
Mario
Blu
1990/02/05
nome
cognome
Mario
Rossi
Mario
Blu
SELECT nome, cognome FROM studente WHERE nome = ‘Mario’;
•
Esempio 6
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
00002
Giovanni
Gialli
1990/05/02
00003
Mario
Blu
1990/02/05
SELECT * FROM studente WHERE nome = ‘Mario’;
matricola
nome
cognome
data_nascita
00001
Mario
Rossi
1990/04/10
00003
Mario
Blu
1990/02/05
Interrogazione – 4/4
La Clausola WHERE – 4/21
Interrogazione – 4/4
La Clausola WHERE – 5/21
•
Esempio 7
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliSELECT nome, cognome
FROM cliente
WHERE citta = ‘Salerno’;
Tabella: cliente
nome
cognome
Silvio Blu Maria AzzurroInterrogazione – 4/4
La Clausola WHERE – 6/21
•
Esempio 8
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliSELECT nome, cognome
FROM cliente
WHERE citta = ‘Salerno’ AND cap = 84121;
Tabella: cliente
nome
cognome
Silvio BluInterrogazione – 4/4
La Clausola WHERE – 7/21
•
Esempio 9
prodID
descrizione
prezzo
2504 Peluche 10 2809 Macchinina 25 3487 Pista 50 2980 Bambola 30SELECT prodID
FROM giocattolo
WHERE prezzo >= 20 AND prezzo <= 40;
Tabella: giocattolo
prodID
2809 2980Interrogazione – 4/4
La Clausola WHERE – 8/21
•
Esempio 10
prodID
descrizione
prezzo
2504 Peluche 10 2809 Macchinina 25 3487 Pista 50 2980 Bambola 30SELECT prodID
FROM giocattolo
WHERE prezzo <= 20 OR prezzo > 30;
Tabella: giocattolo
prodID
2504 3487Interrogazione – 4/4
La Clausola WHERE – 9/21
•
Esempio 11
prodID
descrizione
prezzo
2504 Peluche 10 2809 Macchinina 25 3487 Pista 50 2980 Bambola 30SELECT prodID
FROM giocattolo
WHERE prezzo BETWEEN 20 AND 45;
Tabella: giocattolo
prodID
2809 2980Interrogazione – 4/4
La Clausola WHERE – 10/21
•
Esempio 12
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliSELECT clienteID, nome, cognome
FROM cliente
WHERE citta IN (‘Salerno’, ‘Baronissi’);
Interrogazione – 4/4
La Clausola WHERE – 10/21
•
Esempio 12
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliSELECT clienteID, nome, cognome
FROM cliente
WHERE citta IN (‘Salerno’, ‘Baronissi’);
Tabella: cliente
Con la clausola IN, viene verificato se il valore, di un campo specificato (in questo
esempio, il campo citta), appartiene all’insieme indicato (nell’esempio, l’insieme
Interrogazione – 4/4
La Clausola WHERE – 10/21
•
Esempio 12
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliSELECT clienteID, nome, cognome
FROM cliente
WHERE citta IN (‘Salerno’, ‘Baronissi’);
Tabella: cliente
clienteID
nome
cognome
52 Silvio Blu 58 Maria Azzurro 60 Luigi MagentaInterrogazione – 4/4
La Clausola WHERE – 11/21
•
Esempio 13
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliSELECT clienteID, nome, cognome
FROM cliente
WHERE citta IN (‘Eboli’, ‘Baronissi’);
Interrogazione – 4/4
La Clausola WHERE – 11/21
•
Esempio 13
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliSELECT clienteID, nome, cognome
FROM cliente
WHERE citta IN (‘Eboli’, ‘Baronissi’);
Tabella: cliente
clienteID
nome
cognome
60 Luigi Magenta 61 Giorgio ViolaInterrogazione – 4/4
La Clausola WHERE – 12/21
•
In SQL le stringhe sono racchiuse tra apici (ad esempio,
‘ciao’
)
•
L’operatore LIKE è utilizzato per il pattern matching nelle stringhe,
ovvero, per l’identificazione di stringhe il cui schema è specificato
•
Esempi di pattern (schemi) di ricerca
1.
«tutte le stringhe che iniziano con la sottostringa ‘E’»
•
Sintassi SQL: LIKE ‘E%’
2.
«tutte le stringhe che finiscono con la sottostringa ‘ire’»
•
Sintassi SQL: LIKE ‘%ire’
3.
«tutte le stringhe che contengono la sottostringa ‘mare’»
•
Sintassi SQL: LIKE ‘%mare%’
4.
«tutte le stringhe ‘Cas_’ in cui l’ultimo carattere può essere qualsiasi»
•
Sintassi SQL: LIKE ‘Cas_’
5.
«tutte le stringhe che contengono la sottostringa ‘m_re’, dove il secondo
carattere può essere qualsiasi»
Interrogazione – 4/4
La Clausola WHERE – 13/21
•
Esempio 14
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliSELECT clienteID, nome, cognome
FROM cliente
WHERE nome LIKE ‘Ma%’;
Tabella: cliente
clienteID
nome
cognome
50 Mario Rossi 58 Maria AzzurroInterrogazione – 4/4
La Clausola WHERE – 14/21
•
Esempio 15
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliSELECT nome, cognome
FROM cliente
WHERE nome LIKE ‘%io’;
Tabella: cliente
nome
cognome
Mario Rossi Giulio Bianchi Silvio Blu Giorgio ViolaInterrogazione – 4/4
La Clausola WHERE – 15/21
•
Esempio 16
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliTabella: cliente
SELECT cognome
FROM cliente
WHERE cognome LIKE ‘%a%’;
cognome
Bianchi Azzurro MagentaInterrogazione – 4/4
La Clausola WHERE – 16/21
•
Esempio 17
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliTabella: cliente
SELECT nome
FROM cliente
WHERE nome LIKE ‘M%a’;
nome
MariaInterrogazione – 4/4
La Clausola WHERE – 17/21
•
Esempio 18
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliTabella: cliente
SELECT nome
FROM cliente
WHERE nome LIKE ‘%g%’;
nome
GiulioLuigi Giorgio
Interrogazione – 4/4
La Clausola WHERE – 18/21
•
Esempio 19
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliSELECT clienteID, nome, cognome
FROM cliente
WHERE cap LIKE ‘8412_’;
Tabella: cliente
clienteID
nome
cognome
52 Silvio Blu 58 Maria AzzurroInterrogazione – 4/4
La Clausola WHERE – 19/21
•
Esempio 20
clienteID
nome
cognome
cap
citta
50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 EboliSELECT clienteID
FROM cliente
WHERE cap LIKE ‘84_2_’;
Tabella: cliente
clienteID
52 58 61Interrogazione – 4/4
La Clausola WHERE – 20/21
•
Valori NULLI e NON NULLI
•
Esempio 21
autoID
marca
modello
immatricolazione
FIAT500_1 FIAT 500 2011FIAT500L_1 FIAT 500L 2014 ALFAGIULIA_1 Alfa Romeo Giulia 2016 JEEPR_1 Jeep Renegade 2015 FIAT500_2 FIAT 500 NULL
SELECT autoID, marca, modello
FROM auto
WHERE immatricolazione IS NOT NULL;
Tabella: auto
autoID
marca
modello
FIAT500_1 FIAT 500 FIAT500L_1 FIAT 500L ALFAGIULIA_1 Alfa Romeo GiuliaInterrogazione – 4/4
La Clausola WHERE – 21/21
•
Valori NULLI e NON NULLI
•
Esempio 22
autoID
marca
modello
immatricolazione
FIAT500_1 FIAT 500 2011FIAT500L_1 FIAT 500L 2014 ALFAGIULIA_1 Alfa Romeo Giulia 2016 JEEPR_1 Jeep Renegade 2015 FIAT500_2 FIAT 500 NULL