IL LINGUAGGIO SQL
Structured Query Language Contiene sia il DDL sia il DML, quindi consente di: Definire e creare il database Effettuare l inserimento, la cancellazione, l aggiornamento dei record di un archivio Interrogare il database Ne esistono varie versioni Le interrogazioni con SQL sono un estensione di quelle che si possono realizzare con sequenze di operazioni relazionali (si possono effettuare calcoli, raggruppamenti e ordinamenti) 2
Identificatori Nomi di tabelle e di attributi costituiti da sequenze di max 18 caratteri. Possono contenere il carattere _ nel caso di nomi composti. Il nome di un attributo è identificato con la notazione: NomeTabella.NomeAttributo Il nome della tabella può essere omesso se non ci sono ambiguità nell identificazione dell attributo. Nella dichiarazione della struttura della tabella occorre specificare il tipo dei dati scelto per gli attributi. 3
Tipi di dati standard BOOLEAN valore logico True, False CHARACTER(N) Stringa di lunghezza n N da 1 a 15000 Date Time MM/GG/AA HH:MM INTEGER(p) p: max numero di cifre p da 1 a 45 SMALLINT 16 bit p =5 INTEGER 32 bit p =10 DECIMAL(p,s) p da 1 a 45 s da 0 a p REAL Mantissa di precisione 7 FLOAT o DOUBLE PRECISION Mantissa di precisione 15 FLOAT(p) Mantissa di precisione p p da 1 a 45 4
Considerazioni Le diverse versioni del linguaggio SQL differiscono dallo standard sia nel tipo dei dati sia nella sintassi delle istruzioni: verificare sempre nel manuale per l utente o nell help in linea. Le costanti sono delimitate dai caratteri o. Il delimitatore standard è l apice. Gli attributi con valore non disponibile o non definito assumono il valore Null. Null non è mai uguale a nessun altro valore: è diverso da 0 per i dati numerici e dalla stringa vuota per i dati alfanumerici. 5
Le operazioni relazionali Le operazioni relazionali consentono di effettuare le interrogazioni alla base di dati estraendo da una tabella una sottotabella, oppure combinando tra loro più tabelle e generando così nuove relazioni Operatori dell algebra relazionale: Unione, intersezione, differenza Ridenominazione Selezione Proiezione join (join naturale, prodotto cartesiano, theta-join) 6
Unione 7
Intersezione 8
Differenza 9
Selezione e proiezione 10
Selezione produce un risultato che ha lo stesso schema dell'operando contiene un sottoinsieme delle ennuple dell'operando Contiene solo le ennuple che soddisfano la condizione indicata Grado: la relazione ottenuta ha lo stesso grado (le stesse colonne) di quella di partenza 11
Esempio Impiegati che guadagnano più di 50 e lavorano a Milano SELStipendio > 50 AND Filiale = 'Milano' (Impiegati) 12
Proiezione produce un risultato che ha parte degli attributi dell'operando contiene ennuple cui contribuiscono tutte le ennuple dell'operando Semantica: il risultato contiene le ennuple ottenute da tutte le ennuple dell'operando ristrette agli attributi nella lista 13
Le interrogazioni in SQL Il comando SELECT consente di estrarre dal database le informazioni desiderate La struttura base del comando è: SELECT Colonne FROM Tabelle WHERE Condizioni; 14
Esempi SELECT Cognome, Nome, Citta FROM Impiegato WHERE Dipart= medicina ; SELECT Cognome, Nome, Citta FROM Impiegato WHERE Dipart= medicina AND Citta= Torino ; SELECT * FROM Impiegato WHERE Citta= Torino ; 15
Predicati ALL e DISTINCT SELECT ALL * FROM Impiegato WHERE Citta= Torino ; Trova tutte le righe che soddisfano alla condizione (si può omettere, ALL è un predicato di default) SELECT DISTINCT Citta FROM Impiegato; Produce l elenco di tutte le città senza duplicati 16
Abbreviazioni 17
Clausola DISTINCT 18
Clausola AS 19
Selezione senza proiezione Nome,età, reddito delle persone con meno di 30 anni 20
Condizione LIKE Persone il cui nome inizia con A e hanno d come terza lettera 21
Gestione dei valori nulli Impiegati la cui età è maggiore di 40 oppure non è specificata 22
Funzioni di aggregazione Le funzioni di aggregazione sono funzioni predefinite che agiscono sui valori contenuti in un insieme di righe della tabella. Agiscono sui valori di una singola colonna e restituiscono un solo valore Possono essere utilizzate solo come argomento scritto accanto al comando SELECT oppure nella clausola HAVING 23
Count SELECT COUNT(*) FROM Impiegato WHERE Citta= Roma ; 24
Altri operatori aggregati SUM, AVG (media), MAX, MIN Ammettono come argomento un attributo o un espressione, ma non * SUM e AVG ammettono argomenti numerici o tempo MAX e MIN ammettono argomenti su cui è definibile un ordinamento ignorano i campi con valore Null Ammettono l opzione DISTINCT 25
Esempi Il primo e l ultimo cognome della tabella Impiegato: SELECT MIN(Cognome), MAX(Cognome) FROM Impiegato; Stipendio medio dei dipendenti con sede a Torino, senza righe duplicate: SELECT AVG DISTINCT(Stipendio) FROM Impiegato WHERE Citta= Torino 26
Ordinamento: ORDER BY Nome e reddito delle persone con meno di 30 anni in ordine alfabetico 27
Raggruppamenti: GROUP BY Le funzioni di aggregazione possono essere applicate a gruppi di record La clausola GROUP BY permette di raggruppare un insieme di righe aventi lo stesso valore nelle colonne indicate dalla clausola. I valori Null non vengono considerati ad eccezione della funzione COUNT. 28
Esempio Il numero di figli di ciascun padre: 29
Clausola HAVING La clausola HAVING viene normalmente usata insieme a GROUP BY. La condizione scritta dopo HAVING in genere controlla il valore restituito dalle funzioni di aggregazione (Count, Sum, Avg, Max, Min) e serve a visualizzare le sole righe del raggruppamento che soddisfano le condizioni specificate accanto ad HAVING. Esempio: SELECT Dipartimento, COUNT(ID), SUM(Stipendio) FROM Impiegato GROUP BY Dipartimento HAVING COUNT (ID)>2; 30
Tabella riassuntiva SELECT FROM WHERE GROUP BY HAVING ORDER BY elenco colonne da mostrare Tabelle da cui estrarre le righe Condizioni sulle congiunzioni Campi da considerare nei raggruppamenti Condizioni sui raggruppamenti Ordinamenti sulle colonne elencate nella SELECT obbligatorio obbligatorio 31
Condizioni di ricerca I criteri di selezione usati nelle clausole Where e Having possono contenere: Gli operatori di confronto =,<,>,<>,>=,<= Più condizioni legate tra loro con gli operatori AND e OR, eventualmente precedute da NOT BETWEEN esempio: where Stipendio between 3000 and 4000; IN es: where Citta IN ( Torino, Roma, Pavia ); LIKE es: WHERE Cognome LIKE abc% ; WHERE Cognome LIKE %$_% ESCAPE $ ; IS NULL oppure IS NOT NULL 32