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