SQL: STRUCTURED QUERY LANGUAGE Appunti di Carriere Luca e De Lorenzis Piero Lezione dell’Ing. Lucia Vaira 30/04/2014 L’SQL è un linguaggio standardizzato per database che può essere suddiviso in: - DDL: Data Definition Language, crea e modifica la struttura del database attraverso i comandi (Create, Alter, Drop); DML: Data Manipulation Language, manipola dati attraverso i comandi (Insert, Update, Delete); DCL: Data Control Language, gestisce i permessi di accesso ai dati attraverso i comandi (Grant, Revoke); DQL: Data Query Language, crea Query per estrarre informazioni dal Database attraverso il comando Select; Vincoli dell’SQL: - NOT NULL: il tipo di dato inserito nel campo non deve essere incompatibile con il tipo dichiarato (NULL: valore sconosciuto, nascosto o con attributo incompatibile); DEFAULT: inserisce un valore di Default se il campo è Null; UNIQUE: assicura l’univocità di un campo; PRIMARY KEY: definisce una chiave primaria; FOREIGN KEY: definisce una chiave esterna; CHECK: controlla un campo; INDEX: indicizza un campo; Funzioni Principali SQL (C.R.U.D.) Questo acronimo che sta per (Create, Read, Update, Delete) contiene in sé tutte le principali operazioni che si possono effettuare su un Database descrivendone il suo ciclo di vita, dalla sua creazione alla sua cancellazione. CREATE (Creare una tabella dati) CREATE TABLE nome_tabella ( col1 tipodato, col2 tipodato, … colN tipodato, PRIMARY KEY (ID) ); Esempio: creazione di una tabella contenente i dati del cliente; CREATE TABLE cliente( id int NOT NULL, nome varchar(20) NOT NULL, anni int, PRIMARY KEY (ID)); READ SELECT (From, Where, Select) (Selezionare dati da tabelle esprimendo o meno determinate condizioni) Esempio: selezionare un certo elemento all’interno di una tabella SELECT anni FROM cliente WHERE nome=”Mario”; Restituisce gli anni di tutti i clienti di nome Mario; se dopo il SELECT si inserisce il simbolo * il comando restituirà tutti i campi presenti, non solo gli anni; UPDATE (Modificare i dati presenti in una tabella, una volta caricata) UPDATE nome_tabella SET col1=[val1] SET col2=[val2] … WHERE condizione; Esempio: Impostare a 23 gli anni di tutti i clienti che si chiamano Mario; UPDATE cliente SET anni=23 WHERE nome=”Mario”; DELETE (Cancellare un dato in base a una condizione) DELETE FROM nome_tabella WHERE condizione; ALIAS E NOTAZIONE CON PUNTO Alias di Colonna: consentono di agevolare l’organizzazione dell’output, rendendoli più facili da leggere. Alias di Tabella: consente di ottenere informazioni contenute in due tabelle diverse attraverso il comando FROM SELECT nome_tabella1.attributo, nome_tabella2.attributo FROM tabella1, tabella2 AS nome_tabella1; FUNZIONI DI AGGREGAZIONE Sono delle tipiche funzioni chiamate anche deterministiche, che una volta ricevuti N dati in input restituiscono un solo output. Sono Funzioni di Aggregazione: SUM (Somma), AVG (Media), MIN (Minimo), MAX (Massimo), COUNT (Conta elementi) GROUP BY Consente di raggruppare una tabella secondo un certo ordine espresso dall’utente SELECT col1, col2 FROM nome_tabella WHERE condizione GROUP BY col1, col2 ORDER BY col1, col2; (L’ordinamento può essere crescente “ASC” o decrescente “DISC”) Esempio: sommare gli stipendi dei singoli clienti e ordinarli per nome. SELECT nome, SUM stipendio FROM cliente GROUP BY nome; HAVING Consente di limitare l’output in base alla funzione di aggregazione espressa. SELECT col1, col2 FROM tabella1, tabella2 WHERE condizione1 GROUP BY col1, col2 (dopo aver raggruppato “GROUP BY” viene inserita questa post-condizione HAVING condizione2 diversa dalla condizione1 che filtra nuovamente gli elementi) ORDER BY col1, col2; Esempio: prende tutti gli elementi da cliente, prende tutti i valori dalla colonna anni e filtra tutti i valori >=2. SELECT * FROM cliente GROUP BY anni HAVING COUNT anni>=2; JOIN Le Join vengono utilizzate per combinare il risultato di due o più tabelle. Supponendo quindi di avere due tabelle (A e B) Tipi di Join: - INNER JOIN: combina i risultati comuni in A e B; LEFT JOIN: combina i risultati nella tabella di sinistra con le condizioni della tabella di destra; RIGHT JOIN: combina i risultati nella tabella di destra con le condizioni della tabella di sinistra; FULL JOIN: combina i risultati di tutta A e tutta B; SELF JOIN: combina i risultati di una tabella con se stessa; CARTESIAN JOIN: combina tutte le possibili combinazioni tra A e B; Il FULL JOIN in Microsoft Access non esiste ma può essere scritta così Procedura del LEFT JOIN UNION ALL Procedura del RIGHT JOIN