Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7 Il trattamento dei dati database: il linguaggio SQL seconda parte Prof. Valle – D.ssa Folgieri Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 1 SQL: azioni sui dati Nella scorsa lezione abbiamo visto gli operatori aritmetici, di confronto e logici. Ora completiamo l’argomento con i comandi che sono necessari per comporre istruzioni in SQL per “maneggiare” i dati. Vediamo, cioè, i VERBI di SQL, poiché le espressioni principali sono proprio costituite da cinque comandi che corrispondono ad azioni che si possono compiere sui dati. Si suole dire, per ricordarli meglio, che i verbi di SQL sono 5. Essi corrispondono alle operazioni possibili sui dati. Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 2 I 5 verbi di SQL I seguenti comandi consentono di effettuare, se combinati adeguatamente con gli operatori già visti, tutte le operazioni principali per trattare i dati: • CREATE – per creare le strutture (tabelle) che conterranno i dati in un database • INSERT – per inserire i valori nei campi delle tabelle create • DELETE – per cancellare i valori nei campi delle tabelle create • SELECT – per selezionare (ricercare) i dati rispondenti a determinati criteri (cioè per effettuare una query, ovvero un’interrogazione) • UPDATE – per aggiornare i valori dei dati secondo un determinato criterio Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 3 Traduzione del modello E/R in struttura fisica del database Riprendiamo alcuni concetti circa la corrispondenza tra il modello E/R e la struttura fisica (implementazione) di una base di dati. Ricordate che: • Le entità diventano le tabelle • Gli attributi diventano i campi (colonne) delle tabelle • Le relazioni sono indicate tramite le chiavi (primarie ed esterne) Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 4 Tabelle e relazioni In un database, dunque, una tabella corrisponde ad un’entità. Gli attributi saranno i campi (le colonne) della tabella e le relazioni si specificano utilizzando le chiavi. Si dice grado della tabella il numero di colonne che la costituisce. La singola riga di dati (cioè le informazioni relative ad una istanza) si dice record. Codice targa Codice Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 5 Creare una tabella - 1 Per collezionare i dati in un database, occorre innanzitutto creare la struttura atta a contenerli. Occorre cioè creare una tabella (entità) contenente i corrispondenti campi (attributi). Per fare ciò, si usa il comando CREATE TABLE. La sintassi è: CREATE TABLE <nome-tabella>(<specifiche>) Tra parentesi vengono posti i nomi dei campi. Per ogni campo è specificato il tipo di dato e le sue dimensioni. Alcuni elementi di specifica sono opzionali: per esempio si può decidere se porre o meno dei vincoli sui campi (es. “non deve essere nullo”)… lo vedremo nei prossimi esempi Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 6 Creare una tabella - 2 Ricordiamo la sintassi del comando CREATE TABLE: CREATE TABLE <nome-tabella>(<specifiche>) Tra parentesi vengono posti i nomi dei campi. Esempio: CREATE TABLE Anagrafica ( identificativo integer, cognome char(40), nome char(40), indirizzo varchar(60), telefono varchar(40) ) Per ogni campo è specificato il nome (a sinistra), il tipo di dato (a destra) e le sue dimensioni (tra parentesi, ad esempio char(40) che significa tipo di dato alfanumerico che può essere lungo al massimo 40 caratteri). Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 7 Creare una tabella - 3 Si possono aggiungere anche alcuni vincoli, ad esempio dire: - se un valore deve essere inserito per forza (NOT NULL) - se è previsto un valore preimpostato, che l’utente può sempre cambiare (DEFAULT) - inoltre si può specificare quale sia la chiave primaria Esempio (i vincoli sono posti a destra della dimensione): CREATE TABLE Anagrafica ( identificativo char(16), cognome char(40) nome char(40) indirizzo varchar(60) telefono varchar(40) PRIMARY KEY(identificativo) ) NOT NULL, NOT NULL, DEFAULT ‘sconosciuto’, NOT NULL, NOTATE che ogni riga, sia in questo che nell’esempio precedente, tranne l’ultima prima della parentesi, deve terminare con una virgola. Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 8 Creare una tabella 4 Analizziamo quanto abbiamo scritto: CREATE TABLE Anagrafica ( identificativo char (16), cognome char(40) nome char(40) indirizzo varchar(60) telefono varchar(40) PRIMARY KEY(identificativo) ) NOT NULL, Abbiamo creato la NOT NULL, struttura (non vi DEFAULT ‘sconosciuto’, NOT NULL, abbiamo ancora immesso i dati) di una tabella Anagrafica che contiene: • Il campo identificativo (la chiave primaria, potrebbe essere anche il codice fiscale) che distingue un nominativo da un altro • Il campo cognome e il campo nome, entrambi non nulli e di lunghezza massima 40 • Il campo indirizzo, di lunghezza massima 60, che propone per default, in immissione, la dicitura “sconosciuto” • Il campo telefono, di lunghezza massima 40, che non può essere nullo. • Alla fine dell’elenco dei campi, prima della parentesi di chiusura, abbiamo specificato che il campo identificativo è la variabile primaria, ovvero nella tabella non sono ammessi due record (due nominativi) diversi con lo stesso identificativo (così posso distinguere eventuali omonimie). Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 9 Modificare la struttura di una tabella -1 Una volta creata una tabella, potremmo aver bisogno di modificarne la struttura. Non è necessario cancellare la tabella e crearne un’altra, poiché si possono utilizzare alcuni comandi che agiscono sulla struttura aggiungendo, cancellando, o modificando una colonna (ovvero un campo). Nella prossima slide vedremo come. Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 10 Modificare la struttura di una tabella -2 Sintassi del comando che consente di aggiungere una colonna: ALTER TABLE <nome-tabella>( ADD COLUMN<nome-colonna><tipo>|<<altre caratteristiche>| ) Comando per cancellare una colonna: ALTER TABLE <nome-tabella> ( DROP COLUMN <nome-colonna> ) Comando per modificare una colonna (es. aggiungere dei vincoli o cancellarli): ALTER TABLE <nome-tabella> ( ALTER COLUMN <nome-colonna> DROP DEFAULT ) ALTER TABLE <nome-tabella> ( ALTER COLUMN <nome-colonna> SET DEFAULT <valore-predefinito> ) Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 11 Modificare la struttura di una tabella - esempi Per aggiungere una colonna: ALTER TABLE Anagrafica ( email char(50) ) NOT NULL abbiamo aggiunto alla tabella Anagrafica il campo email lungo al massimo 50 caratteri e con il vincolo NOT NULL, cioè deve essere sempre compilato in fase di immissione – non può essere nullo Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 12 Modificare la struttura di una tabella - esempi Per cancellare una colonna: ALTER TABLE Anagrafica ( DROP COLUMN telefono ) Abbiamo cancellato la colonna telefono dalla tabella Anagrafica (e, se avevamo già immesso i dati, anche tutti i dati contenuti nel campo!) Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 13 Modificare la struttura di una tabella - esempi Per modificare una colonna possiamo, ad esempio, togliere i valori di default. Ad esempio, avevamo impostato il campo indirizzo in modo che per default, all’immissione, proponesse il valore ‘sconosciuto’. Con il seguente comando, facciamo in modo che, all’immissione, non vengano proposti valori di default: ALTER TABLE Anagrafica ( ALTER COLUMN indirizzo DROP DEFAULT ) Se invece volessimo impostare un valore di default, per esempio imporre che il campo telefono proponesse il prefisso +39 (Italia) all’immissione, dovremmo scrivere: ALTER TABLE Anagrafica ( ALTER COLUMN telefono SET DEFAULT ‘+39’ ) Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 14 Come eliminare una tabella - 1 Infine vediamo come eliminare una tabella dal database. Il comando DROP permette di eliminare interamente una tabella (compresi i dati in essa contenuti!). La sintassi è: DROP TABLE <nome-tabella> Esempio: DROP TABLE Anagrafica Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 15 Come eliminare una tabella - 2 ATTENZIONE: l’eliminazione di una tabella è consentita solo all’utente che l’ha creata Se creo un database sul mio pc e lo metto poi a disposizione di altri utenti che vi accedono (in rete) da altre macchine, le tabelle potranno essere cancellate sempre (e solo) da me, mentre agli altri utenti potrò dare permessi di lettura, inserimento, modifica o cancellazione dei dati. Vedremo nella prossima lezione come assegnare a differenti utenti i diversi permessi… Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 16 INSERT - 1 Ora che abbiamo creato una tabella, vediamo come inserire i valori. Ovviamente qui parliamo di SQL standard, quindi dovremo usare i comandi. Non abbiamo cioè a disposizione interfacce, come avviene in molti RDBMS quali, ad esempio, Microsoft Access, cui faremo cenno nelle prossime lezioni. Per inserire i dati si usa il comando INSERT. Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 17 INSERT - 2 Permette di inserire una riga di valori (un record) in una tabella. Sintassi: INSERT INTO <nome-tabella> VALUES (<espressione1>[,...<espressione-N>]) Facciamo un esempio: INSERT INTO Anagrafica VALUES ( ‘DPPPPO20D74S919X’, 'Pippo', 'De Pippis', 'Via Topolinia 13', '0111,111111‘ ‘[email protected]‘ ) I dati, per essere inseriti, vanno posti tra apice singolo. Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 18 INSERT - 3 Qualche nota su quel che abbiamo scritto: INSERT INTO Anagrafica VALUES ( ‘DPPPPO20D74S919X’, 'Pippo', 'De Pippis', 'Via Topolinia 13', '0111,111111‘ ‘[email protected]‘ ) Come avrete sicuramente notato, i dati vanno posti nello stesso ordine dei campi. Per non sbagliare e dimenticarne qualcuno, è buona norma far precedere l’elenco di valori dall’elenco dei campi, come nell’esempio della prossima slide. Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 19 INSERT - 4 Far precedere l’elenco di valori dall’elenco dei campi: Elenco dei campi Sintassi: INSERT INTO <nome-tabella> (<colonna-1>[,...<colonna-N>])] VALUES (<espressione-1>[,...<espressione-N>]); Elenco dei valori assegnati ai campi Adottando questa sintassi è difficile dimenticare di inserirne qualcuno. Nella slide successiva vedremo l’esempio corrispondente… Lez9 15.11.06 Trattamento dati. Database: il linguaggio SQL-prima parte 20 INSERT - esempio Esempio: INSERT INTO Anagrafica ( Identificativo, Cognome, Nome, Indirizzo, Telefono ) VALUES ( 01, 'Pippo', 'De Pippis', 'Via Topolinia 13', '0111,111111' ) Lez9 15.11.06 Elenco dei campi Elenco dei valori assegnati ai campi Trattamento dati. Database: il linguaggio SQL-prima parte 21