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 MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonio GialliCiroCardiologia BianchiAnna48000
Esempio SELECT Cognome, Nome FROM Medici MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonio GialliCiroCardiologia BianchiAnna48000 CognomeNome RossiMario VerdiAntonio GialliCiro BianchiAnna
Più specifici Se vogliamo conoscere i medici che hanno specializzazione in urologia? MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonioUrologia GialliCiroCardiologia RossiAnnaOrtopedia48000
Condizione - Where SELECT Nome, Cognome FROM Medici WHERE Specializzazione = ‘Urologia’ MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonioUrologia GialliCiroCardiologia RossiAnnaOrtopedia48000 MatricolaCognomeNomeSpecializzazio ne Salario 2VerdiAntonioUrologia45000
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 SELECT Salario FROM Medici WHERE Cognome=‘Rossi’ AND Specializzazione=‘Ortopedia’ MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonioUrologia GialliCiroCardiologia RossiAnnaOrtopedia48000 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 SELECT Salario FROM Medici WHERE Specializzazione=‘Urologia’ OR Specializzazione=‘Ortopedia’ MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardilogia VerdiAntonioUrologia GialliCiroCardilogia RossiAnnaOrtopedia48000 Salario
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 SELECT COUNT(*) FROM Medici WHERE Specializzazione = ‘Cardiologia’ MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonioUrologia GialliCiroCardiologia RossiAnnaOrtopedia
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? SELECT SUM(Salario) FROM Medici MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonioUrologia GialliCiroCardiologia RossiAnnaOrtopedia
Sum Quanto costano i medici Cardiologi in termini di stipendi? SELECT SUM(Salario) FROM Medici WHERE Specializzazione = ‘Cardiologia’ MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonioUrologia GialliCiroCardiologia RossiAnnaOrtopedia
AVG Calcola la media aritmetica dei valori di una colonna ES. Quant’è la media degli stipendi dei medici? MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonioUrologia GialliCiroCardiologia RossiAnnaOrtopedia48000
AVG Quant’è la media degli stipendi dei medici? SELECT AVG(Salario) FROM Medici MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonioUrologia GialliCiroCardiologia RossiAnnaOrtopedia
AVG Quant’è la media degli stipendi dei medici Cardiologi? SELECT AVG(Salario) FROM Medici WHERE Specializzazione = ‘Cardiologia’ MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonioUrologia GialliCiroCardiologia RossiAnnaOrtopedia
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 SELECT MAX(Salario) FROM Medici MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonioUrologia GialliCiroCardiologia RossiAnnaOrtopedia48000
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 SELECT MIN(Salario) FROM Medici MatricolaCognomeNomeSpecializzazioneSalario 1RossiMarioCardiologia VerdiAntonioUrologia GialliCiroCardiologia RossiAnnaOrtopedia
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 PatenteCognome 154Blu 231Verdi 376Gialli 473Rossi ProprietarioTarga 341ab22ed 473cd352ma 154na659nx 457az649cd
Natural Join Vogliamo un Join delle righe delle due tabelle dove i valori dei campi Proprietario e Patente sono uguali SELECT * FROM Persone, Auto WHERE Patente = Proprietario PatenteCognome 154Blu 231Verdi 376Gialli 473Rossi ProprietarioTarga 341ab22ed 473cd352ma 154na659nx 457az649cd
Natural Join SELECT * FROM Persone, Auto WHERE Patente = Proprietario PatenteCognomeProprietarioTarga 154Blu154na659nx 473Rossi473cd352ma