Manuale Comandi SQL Sito per esercitarsi (on line)... 1 SQL... 1 Convenzioni e simboli usati... 2 Query Language... 2 Comando Select... 2 Order By:... 3 Sintassi generale:... 3 Ordinamanto su PIU campi... 3 Campi calcolati... 4 campi calcolati Sintassi generale:... 4 Select con Join (due tabelle)... 4 Select con Join (3 tabelle)... 5 Funzioni aggregazione (SUM, COUNT, AVG, ) e raggruppamento (GROUP BY)... 5 Funzioni di Aggregazione (senza raggruppamento)... 5 Funzione di raggruppamento (senza aggregazione)... 6 Funzione di aggrgazione con raggruppamento... 6 DML (Data Manipulation Language)... 7 Insert... 7 1) Insert semplice (SCONSIGLIATO vivamente!):... 7 2) Insert :... 7 3) Insert mediante select:... 7 Update... 7 Delete... 8 DDL (Data Definition Language)... 9 Create Database... 9 Create Table... 9 Create View... 9 Alter Table... 9 Drop Table... 10 Sito per esercitarsi (on line) SQL SQL (Stuctured Query Language) linguaggio di interrogazione strutturato. E il linguaggio usato dal DBMS per interfacciarsi con gli utenti (utenti e programmi). SQL DDL (Data Definition Language): Definizione Dati. Permette di: Creare/Eliminare Data Base Creare/Eliminare Tabelle Modificare Tabelle (i campi) DML(Data Manipulation Language): Modifica Dati. Non restituisce dati. Permette di: Inserire record Modificare record Eliminare record QL (Query Language): Interrogazione Permette di interrogare il DB. Restituisce sempre un insieme di record (RecordSet) 1
Convenzioni e simboli usati Verranno utilizzatele usuali convenzioni per esprimere la sintassi del linguaggio: < > le parentesi acute indicano la categoria sintattica descritta al loro interno e quindi NON devono essere utilizzate nella sintassi es: FROM <Nome Tabella> al posto di <Nome Tabella> si dovrà mettere il nome di una tabella SENZA i simboli< >: FROM Prodotti dove Prodotti è il nome della tabella Prodotti [ ] i costrutti fra parentesi quadre sono opzionali significa oppure, i costrutti separati dal simbolo sono alternativi Query Language Comando Select Il comando Select permette di specificare la selezione di dati ( interrogazioni ) ed è così strutturato. SELECT [ALL DISTINCT] <elenco-campi> FROM <Nome Tabella> <lista-tabelle (separate da JOIN )> [WHERE <condizione>] [GROUP BY <lista-campi>] [HAVING <condizione>] [ORDER BY <campo1> [ASC DESC] [, campo2 [ASC DESC] ] La sintassi nella forma più semplice è: FROM <nome tabella> <elenco campi> è l'elenco dei campi da estrarre (separati tra loro con una virgola) oppure per selezionare tutti i campi SELECT * <nome tabella> è il nome della tabella a cui ci si riferisce La sintassi nella forma più semplice ma con la clausola WHERE è: FROM <nome tabella> WHERE <condizione> < condizione > è una condizione sui campi: si utilizzano i consueti operatori di confronto (op_conf): =, >, <, <> <campo> < op_conf> <valore> <campo> < op_conf> <espressione> <campo> < op_conf> <campo> si utilizzano anche i consueti operatori logici AND, OR, NOT (<condizione >) AND (<condizione>) (<condizione >) OR (<condizione>) NOT(<condizione >) 2
Per gli esempi si considerino le tabelle Anag e Citta Anag CF_PK Nome Cognome NomeCittaFK Indirizzo Num_Civico Citta NomePK Regione NumAb Selezione di nome, indirizzo e dei residenti a Treviso al numero civico 9; comando SQL: SELECT Nome, Indirizzo, Num_Civico FROM Anag WHERE (NomeCittaFK ='Treviso') AND (Num_Civico = 9) Order By: Select con ordinamento dei record Sintassi generale: FROM <nome tabella> ORDER BY <nome-campo> [DESC ASC] < nome-campo > indica il nome del campo secondo cui si desidera effettuare l ordinamento DESC ASC indicano rispettivamente ordinamento crescente o decrescente se omesso si considera ASC Esempio: Record ordinati per cognome decrescente: SELECT * FROM Anag ORDER BY Cognome DESC Ordinamanto su PIU campi FROM <nome tabella> ORDER BY <nome-campo1> [DESC ASC], <nome-campo2> [DESC ASC], Se volessimo, a parità di cognome, ordinare per nome SELECT * FROM Anag ORDER BY Cognome, Nome 3
Campi calcolati Un campo calcolato è il risultato di un espressione ( formata da altri campi, valori, operatori) a cui si assegna un nome campi calcolati Sintassi generale: SELECT, <espressione> AS <nome-campo-calcolato> FROM <nome tabella> < espressione > è una espressione sui campi: si utilizzano i consueti operatori aritmetici(op): +, -, *, / e le eventuali parentesi secondo gli usuali criteri delle espressioni matematiche <campo> < op > <valore> <campo> < op > <espressione> <campo> < op > <campo> < nome-campo-calcolato > è il nome scelto per il nuovo campo calcolato: Data la tabella Quantita visualizzare la produzione in eccesso per i prodotti di ogni nazione. Quantita Nazione NomeProdotto QuantitaProdotta QuantitaConsumata SELECT NomeProdotto, QuantitaProdotta - QuantitaConsumata AS Eccedenza FROM Quantita Select con Join (due tabelle) Specifica il legame fra i record delle tabelle. OBBLIGATORIO, per ottenere dati significativi quando si selezionano i dati da 2 o più tabelle. JOIN (SQL standard) INNER JOIN (in MsAccess) comando SQL: FROM <nometab_1> JOIN < nometab_2> ON <condizione JOIN> <elenco campi> è l'elenco dei campi da estrarre separati tra loro con una virgola e preceduti dal nome della tabella: <nometab_1>.<nomecamp_1>, <nometab_1>.<nomecamp_2> oppure per selezionare tutti i campi SELECT * <nome tabella> è il nome della tabella a cui ci si riferisce <condizione JOIN> indica la corrispondenza dei campi (solitamente ciave primaria ed esterna): <nometab_1>.<nomecamp_1> = <nometab_2>.< nomecamp _1> AND <nometab_1>.<nomecamp_2> = <nometab_2>.< nomecamp _2> Esempio Selezione di cognome, indirizzo, città e numero relativi abitanti per i residenti in Veneto; SELECT Anag.Cognome, Anag.Indirizzo, Citta.NomePK as Citta, Citta.NumAb FROM Anag JOIN Citta ON (Anag. NomeCittaFK = Citta.NomePK) WHERE Regione='Veneto' 4
consideriamo ora il DB di ACCESS. Prodotti CodiceProdotto Descrizione Nazioni CodiceNazione Nome Abitanti Quantita CodiceProdotto CodiceNazione QuantitaProdotta QuantitaConsumata Select con Join (3 tabelle) Se si hanno tre tabelle bisogna creare il primo JOIN fra 2 tabelle e farne il Join con la terza es: FROM (<nometab_1> JOIN < nometab_2> ON <condizione JOIN>) JOIN < nometab_3> ON <condizione JOIN_2> Nella query che segue è evidenziato il primo JOIN SELECT Nazioni.NomeNazione, Prodotti.Descrizione, Quantita.QuantitaProdotta FROM (Nazioni INNER JOIN Quantita ON Nazioni.CodiceNazione = Quantita.CodiceNazione) INNER JOIN Prodotti ON Prodotti.CodiceProdotto = Quantita.CodiceProdotto Funzioni aggregazione (SUM, COUNT, AVG, ) e raggruppamento (GROUP BY) Funzioni di Aggregazione (senza raggruppamento) Si crea un unico gruppo per tutti i record SELECT <FunzAggr>( nome_campo) AS <nome_nuovo_campo>, FROM <NomeTab>; < FunzAggr> è una fra SUM, COUNT, AVG, Max, Min 5
<nome_nuovo_campo> è il nome dato al nuovo campo <nome tab> è il nome della tabella a cui ci si riferisce SELECT Sum(Nazioni.Abitanti) AS NumAB FROM Nazioni; Risultato ottenuto: NumAB 151600000 Funzione di raggruppamento (senza aggregazione) Si crea un unico gruppo per valori uguali del campo (o campi) scelto (scelti) ovvero si eliminano i duplicati SELECT <nome_campo1>, <nome_campo2>, FROM <NomeTab> GROUP BY <nome_campo1>, <nome_campo2>, ; <nome_campo> è il nome del campo <nome tab> è il nome della tabella a cui ci si riferisce Es. si crea un unico gruppo per valori uguali della solita tab. citta SELECT Regione FROM Citta GROUP BY Regione Funzione di aggrgazione con raggruppamento Si crea un unico gruppo per ogni valore diverso del campo di raggruppamento e per tale gruppo viene calcolata la funzione di aggregazione. NB si possono usare più funzioni e raggruppare su più campi. SELECT <nome_camporagg>, <FunzAggr>( <nome_campo>) AS <nome_nuovo_campo>, FROM <NomeTab> GROUP BY < nome_camporagg >, ; < FunzAggr> è una fra SUM, COUNT, AVG, Max, Min <nome_nuovo_campo> è il nome dato al nuovo campo <nome tab> è il nome della tabella a cui ci si riferisce < nome_camporagg > è il nome del campo su cui si raggruppa SELECT Regione, Sum(NumAb) AS TotAbitanti FROM Citta GROUP BY Regione Risultato ottenuto: Regione TotAbitanti Sardegna 900000 Veneto 782 6
DML (Data Manipulation Language) Insert Il comando ha la funzione di inserire i dati nelle tabelle. Sintassi del comando insert 1) Insert semplice (SCONSIGLIATO vivamente!): INSERT INTO <nome_tabella> VALUES (<elenco valori>); dove i valori di <elenco valori> devono essere nello stesso ordine dei campi della tabella 2) Insert : a) INSERT INTO <nome_tabella> (<elenco dei campi>) VALUES (<elenco valori>); viene inserita una riga i valori di <elenco valori> devono essere nello stesso ordine dei campi della tabella oppure b) INSERT INTO <nome_tabella> (<elenco dei campi>) VALUES (<elenco valori 1 >),(<elenco valori 2>),, (<elenco valori n>); vengono inserite più righe i valori di <elenco valori> devono essere nello stesso ordine dei campi della tabella In questo caso, invece, le colonne di destinazione vengono dichiarate, è possibile indicare solo le colonne per le quali vengono passati dei valori in qualsiasi ordine, purché vengano inseriti i valori nello stesso ordine. Nella sintassi a), nella b) Es. consideriamo la Tabella Matricola Classe NumOrdine Nome Cognome T_Alunni INSERT INTO T_Alunni (Nome, Cognome, Matricola) VALUES ( Giuseppe, Rossi,339); 3) Insert mediante select: INSERT INTO nome_tabella (<elenco campi>) SELECT...; Inserimento di una serie di righe risultanti da un comando di select, purché tali righe siano compatibili (stesso numero di campi e tipi corrispondenti) con le colonne della tabella su cui si inseriscono i dati. Update Modifica dei dati delle tabelle. 7
Sintassi del comando update UPDATE <nome_tabella> SET <nome_campo1> = <valore1>, <nome_campo2> = <valore2>,... WHERE <condizione>; : <nome_tabella> è il nome della tabella a cui ci si riferisce <nome_campo1> è il nome del primo campo da modificare <valore1> è il valore da attribuire al primo campo da modificare <nome_campo2> è il nome del secondo campo da modificare <valore2> è il valore da attribuire al secondo campo da modificare Le coppie <campo> = <valore> sono separate da, (virgola). Es consideriamo la solita T_Alunni Matricola Classe NumOrdine Nome Cognome UPDATE T_Alunni SET Nome = Peppe, Classe = 5_Sirio, WHERE Cognome = Rossi ; Delete Cancellazione righe dalle tabelle. Sintassi del comando delete DELETE FROM <nome_tabella> WHERE <condizione>; Es DELETE FROM T_Alunni WHERE Matricola < 102 8
DDL (Data Definition Language) Create Database Creazione nuovo database Create Database <nome-db> <nome DB> indica il nome del nuovo DataBase Es. Create Database Biblioteca Create Table Creazione nuova tabella Create Table <nome tabella> (<nomecampo> <tipocampo>, <nomecampo> <tipocampo>, ) Vediamo la sintassi per la definizione dei campi con altre impostazioni: <nome del campo><tipo del campo> [NOT NULL NULL] [DEFAULT <valore di default>] [AUTO_INCREMENT] NOT NULL implica che il campo non può essere lasciato vuoto quando inseriamo un nuovo record. Viceversa, se definito con NULL, il campo può essere lasciato vuoto. Per default vale NULL. Un campo definito con DEFAULT <valore> assume, se non specificato diversamente durante la inserimento del record, il valore indicato con DEFAULT. Un campo di tipo intero definito come AUTO_INCREMENT assume, in modo automatico ogni volta che inseriamo un nuovo record, valori interi crescenti. Create View Crea una nuova Vista (in MS-Access sono le query salvate ) Create View <nome vista> AS SELECT Alter Table Modifica la struttura di una Tabella (aggiunta- eliminazione campi, cambio tipo campi ) Alter Table <nome tabella> [ADD DROP CHANGE] <specifica campo> Es. 9
alter table alunni add indirizzo char(20); Drop Table Elimina la tabella dal DataBase Drop Table <nome tabella> 10