Lezione 6 - SQL
Linguaggi per DB
 Per interagire con le basi di dati occorre un linguaggio
 Linguaggio SQL (Structured Query Language), linguaggio
standardizzato per basi dati, progettato per:
 Creare e modificare schemi di database DDL (Data
Definition Language)
 Inserire, Modificare e gestire dati memorizzati DML (Data
Manipulation Language
 Interrogare i dati memorizzati DQL (Data Query
Language)
 Creare e gestire strumenti di controllo ed accesso ai dati DCL
(Data Control Language)
Definizione del Problema
 Supponiamo di avere una base di dati per gestire una
struttura ospedaliera
 Ci occorre un elenco dei nomi e cognomi dei medici
 Attenzione, vogliamo che chi legga non venga a
conoscenza dello stipendio
Interrogazioni SQL
 Dobbiamo Selezionare solo ed esclusivamente i campi
che ci interessano di una tabella
SELECT campo1, campo2
FROM NomeTabella
 Il Carattere * permette di selezionare tutti i campi
della tabella
SELECT *
FROM NomeTabella
Esempio
 Ci occorre un elenco dei nomi e cognomi dei medici
Matricola
Cognome
Nome
Specializzazione Salario
1
Rossi
Mario
Cardiologia
2
Verdi
Antonio
3
Gialli
Ciro
4
Bianchi
Anna
40000
45000
Cardiologia
43000
48000
Esempio
Matricola
Cognome
Nome
Specializzazione
Salario
1
Rossi
Mario
Cardiologia
40000
2
Verdi
Antonio
3
Gialli
Ciro
4
Bianchi
Anna
SELECT Cognome, Nome
FROM Medici
Cognome
Nome
Rossi
Mario
Verdi
Antonio
Gialli
Ciro
Bianchi
Anna
45000
Cardiologia
43000
48000
Più specifici
 Se vogliamo conoscere i medici che hanno
specializzazione in urologia?
Matricola
Cognome
Nome
Specializzazione Salario
1
Rossi
Mario
Cardiologia
40000
2
Verdi
Antonio
Urologia
45000
3
Gialli
Ciro
Cardiologia
43000
4
Rossi
Anna
Ortopedia
48000
Condizione - Where
Matricola
Cognome
Nome
Specializzazione
Salario
1
Rossi
Mario
Cardiologia
40000
2
Verdi
Antonio Urologia
45000
3
Gialli
Ciro
Cardiologia
43000
4
Rossi
Anna
Ortopedia
48000
SELECT Nome, Cognome
FROM Medici
WHERE Specializzazione = ‘Urologia’
Matricola
Cognome
Nome
Specializzazio Salario
ne
2
Verdi
Antonio
Urologia
45000
Operatori AND e OR
 Siamo interessati ad individuare il salario dei medici
con cognome Rossi specializzati in Ortopedia
 Le condizioni da rispettare sono due:
 Cognome = Rossi
 Specializzazione = Ortopedia
Operatore AND
Matricola
Cognome
Nome
Specializzazione
Salario
1
Rossi
Mario
Cardiologia
40000
2
Verdi
Antonio
Urologia
45000
3
Gialli
Ciro
Cardiologia
43000
4
Rossi
Anna
Ortopedia
48000
SELECT Salario
FROM Medici
WHERE Cognome=‘Rossi’ AND
Specializzazione=‘Ortopedia’
Salario
48000
Operatore OR
 Siamo interessati ad individuare il salario dei medici
specializzati in Ortopedia oppure Urologia
 Le condizioni di interesse sono due:
 Specializzazione = Urologia
 Specializzazione = Ortopedia
Operatore OR
Matricola
Cognome
Nome
Specializzazione
Salario
1
Rossi
Mario
Cardilogia
40000
2
Verdi
Antonio Urologia
45000
3
Gialli
Ciro
Cardilogia
43000
4
Rossi
Anna
Ortopedia
48000
SELECT Salario
FROM Medici
WHERE Specializzazione=‘Urologia’ OR
Specializzazione=‘Ortopedia’
Salario
45000
48000
Funzioni
 Count - conta
 Sum - somma
 Avg - media
 Max - massimo
 Min - minimo
Count
 Restituisce il numero di righe che soddisfano la
condizione specificata nella clausola WHERE
 Es. Vogliamo conoscere il numero dei medici
specializzati in Cardiologia
Count
 Vogliamo conoscere il numero dei medici specializzati
in Cardiologia
Matricola
Cognome
Nome
Specializzazione
Salario
1
Rossi
Mario
Cardiologia
40000
2
Verdi
Antonio Urologia
45000
3
Gialli
Ciro
Cardiologia
43000
4
Rossi
Anna
Ortopedia
48000
SELECT COUNT(*)
FROM Medici
WHERE Specializzazione = ‘Cardiologia’
2
Sum
 Questa funzione somma tutti i valori di una colonna
 Es. Quanto costano i medici in termini di stipendi?
Sum
 Quanto costano i medici in termini di stipendi?
Matricola
Cognome
Nome
Specializzazione
Salario
1
Rossi
Mario
Cardiologia
40000
2
Verdi
Antonio Urologia
45000
3
Gialli
Ciro
Cardiologia
43000
4
Rossi
Anna
Ortopedia
48000
SELECT SUM(Salario)
FROM Medici
176000
Sum
• Quanto costano i medici Cardiologi in
termini di stipendi?
Matricola
Cognome
Nome
Specializzazione
Salario
1
Rossi
Mario
Cardiologia
40000
2
Verdi
Antonio Urologia
45000
3
Gialli
Ciro
Cardiologia
43000
4
Rossi
Anna
Ortopedia
48000
SELECT SUM(Salario)
FROM Medici
WHERE Specializzazione = ‘Cardiologia’
83000
AVG
 Calcola la media aritmetica dei valori di una colonna
 ES. Quant’è la media degli stipendi dei medici?
Matricola
Cognome
Nome
Specializzazione
Salario
1
Rossi
Mario
Cardiologia
40000
2
Verdi
Antonio Urologia
45000
3
Gialli
Ciro
Cardiologia
43000
4
Rossi
Anna
Ortopedia
48000
AVG
 Quant’è la media degli stipendi dei medici?
Matricola
Cognome
Nome
Specializzazione
Salario
1
Rossi
Mario
Cardiologia
40000
2
Verdi
Antonio Urologia
45000
3
Gialli
Ciro
Cardiologia
43000
4
Rossi
Anna
Ortopedia
48000
SELECT AVG(Salario)
FROM Medici
44000
AVG
 Quant’è la media degli stipendi dei medici Cardiologi?
Matricola
Cognome
Nome
Specializzazione
Salario
1
Rossi
Mario
Cardiologia
40000
2
Verdi
Antonio Urologia
45000
3
Gialli
Ciro
Cardiologia
43000
4
Rossi
Anna
Ortopedia
48000
SELECT AVG(Salario)
FROM Medici
WHERE Specializzazione = ‘Cardiologia’
41500
Max
 Questa funzione calcola il valore massimo di una
colonna
 Es. Vogliamo conoscere l’ammontare dello stipendio
maggiore dei medici
Max
 Vogliamo conoscere l’ammontare dello stipendio
maggiore dei medici
Matricola
Cognome
Nome
Specializzazione
Salario
1
Rossi
Mario
Cardiologia
40000
2
Verdi
Antonio Urologia
45000
3
Gialli
Ciro
Cardiologia
43000
4
Rossi
Anna
Ortopedia
48000
SELECT MAX(Salario)
FROM Medici
48000
Min
 Questa funzione calcola il valore minimo di una
colonna
 Es. Vogliamo conoscere l’ammontare dello stipendio
minimo dei medici
Min
 Vogliamo conoscere l’ammontare dello stipendio
minimo dei medici
Matricola
Cognome
Nome
Specializzazione
Salario
1
Rossi
Mario
Cardiologia
40000
2
Verdi
Antonio Urologia
45000
3
Gialli
Ciro
Cardiologia
43000
4
Rossi
Anna
Ortopedia
48000
SELECT MIN(Salario)
FROM Medici
40000
MAX e MIN sui Caratteri
 Le funzioni di MAX e MIN possono essere utilizzate
anche sui caratteri
 La stringa ‘AAA’ è minore di ‘BB’
 Quindi non si opera sul numero dei caratteri, bensì
sulle lettere
 La stringa ‘Maria’ è maggiore di ‘Giovanna’
JOIN
 Il vocabolo join significa unione
 In SQL si intende unione di tabelle
 E’ importante perché ci permette di visualizzare dati
appartenenti a tabelle diverse
Natural Join
 Il Natural Join è un tipo di operazione che ci permette
di correlare due o più tabelle sulla base di valori uguali
in attributi contenenti lo stesso tipo di dato
 Vogliamo un Join delle righe delle due tabelle dove i
valori dei campi Proprietario e Patente sono uguali
Patente
Cognome
Proprietario
Targa
154
Blu
341
ab22ed
231
Verdi
473
cd352ma
376
Gialli
154
na659nx
473
Rossi
457
az649cd
Natural Join
 Vogliamo un Join delle righe delle due tabelle dove i
valori dei campi Proprietario e Patente sono uguali
Patente
Cognome
Proprietario
Targa
154
Blu
341
ab22ed
231
Verdi
473
cd352ma
376
Gialli
154
na659nx
473
Rossi
457
az649cd
SELECT *
FROM Persone, Auto
WHERE Patente = Proprietario
Natural Join
SELECT *
FROM Persone, Auto
WHERE Patente = Proprietario
Patente
Cognome
Proprietario
Targa
154
Blu
154
na659nx
473
Rossi
473
cd352ma
Scarica

Lezione6 SQL