Istruzioni DML. Istruzioni DML (Data Manipulation Language)

Documenti analoghi
Manuale SQL. Manuale SQL - 1 -

Corso sul linguaggio SQL

Fondamenti di Informatica A. A / 1 9

Sistemi di Elaborazione delle Informazioni

Laboratorio di Basi di Dati

Appunti su SQL. Query Language. Comando Select

DDL (Data Definition Language) schemi DML (Data Manipulation Language) DQL (Data Query Language) DCL (Data Control Language)

A.A. 2018/2019. Introduzione a SQL FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE. Docente Prof. Raffaele Pizzolante

Tabelle esempio: Impiegato/Dipartimento

PROGETTAZIONE DI DATABASE

Elena Baralis 2007 Politecnico di Torino 1

Elena Baralis 2013 Politecnico di Torino 1

Laboratorio di Sistemi Informativi

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati

Manuale Comandi SQL SQL. Sito per esercitarsi (on line) SQL

A.A. 2018/2019. Esercitazione 11. Strutturazione di Istruzioni in Linguaggio SQL. [ Possibili Soluzioni ] FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE

SQL: le funzioni di aggregazione

Linguaggio SQL: fondamenti

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini

A.A. 2018/2019. Esercitazione 12. Strutturazione di Istruzioni in Linguaggio SQL. [ Possibili Soluzioni ] FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Select From Where...

Corso di Basi di Dati A.A. 2015/2016

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2

Principi di Progettazione del Software a.a Il linguaggio SQL. Il Linguaggio SQL

Istruzioni DML. Istruzioni DDL pag. 2 CREATE TABLE pag. 2. ALTER TABLE pag. 6. DROP TABLE pag. 25 CREATE INDEX pag. 26

Interpretazione delle query nidificate

SQL. SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

Corso di Basi di Dati

V. Moriggia Modelli di Base Dati. Modelli di Base Dati. a.a. 2001/

SQL DDL. Create database. Alter database. Drop database

Inserimento. Cancellazione. Modifica. INSERT INTO Persone VALUES ('Mario',25,52) INSERT INTO Persone(Nome, Eta, Reddito) VALUES('Pino',25,52)

La connessione ai database MySQL tramite script PHP versione 5.5

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

IL MODELLO RELAZIONALE

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

Appunti su SQL. Query Language. Comando Select

QL (Query Language) Alice Pavarani

Laboratorio di Basi di Dati

Caratteristiche dei linguaggi per Database

Laboratorio di Basi di Dati

PRODOTTO CARTESIANO Caso Generale

Silvia Chiusano, Paolo Garza 1

SQL. Dott.ssa Elisa Quintarelli

SQL: DDL, VI, Aggiornamenti e Viste

Stringhe di caratteri

Corso di. Basi di Dati I. 9. Esercitazioni in SQL: Check, asserzioni, viste

Interrogazioni nidificate

3. Le routine evento in Access 2000/2003

Basi di Dati: Corso di laboratorio

Per la tabella RelArticoloAutore bisogna creare una chiave multicampo; definiti i campi IdArticolo Numerico e Nome TEXT,

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Prof. Alberto Postiglione Dipartimento di Scienze della Comunicazione Università degli Studi di Salerno

Informatica Grafica. Basi di dati parte 2

DATABASE PER IL WEB. Programmazione Web 1

Corso di Basi di Dati Prime nozioni relative all utilizzo del DBMS MySQL

I.I.S. G. COSSALI - ORZINUOVI DATABASE. Marzo 2017 Prof. Dario Tomasoni 1

Queries su più tabelle

Informatica documentale Laurea in Scienze della Comunicazione Prova scritta del 25 giugno Cognome e nome: Matricola:

PHP ESSENTIALS #10. By WI400 Team. : database e sql

VARIABILI, ASSEGNAZIONE, DECISIONI

Corso di. Basi di Dati I. 10. Esercitazioni in SQL: Complementi

Prof. Pagani corrado SISTEMI INFORMATIVI E DATABASE

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

Structured Query Language

SQL. Lezione 1. Docente: Alberto Belussi

Basi di Dati: Corso di laboratorio

Vincoli, procedure e regole attive in SQL. SQL: vincoli, trigger 1

A. Veneziani Linguaggio SQL

Tipi di sottoquery SQL

LEFT JOIN - RIGHT JOIN - SELF JOIN - CROSS JOIN

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

MODULO 5 - USO DELLE BASI DI DATI 2 FINALITÁ

GESTIONE MAGAZZINO 2

Viste come strumenti di programmazione

Corso di Access. Prerequisiti. Modulo L2A (Access) Struttura delle tabelle

Sommario. Introduzione... 13

<Nome Tabella>.<attributo>

Relazioni e tabelle. Introduzione alle Basi di Dati Relazionali. Relazioni uno a uno. Esempio

Interrogazioni in SQL SQL1 1

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL: fondamenti. Il linguaggio SQL

Filtri. Microsoft Access. Filtri. Filtri

Esempio di database relazionale con l utilizzo del prodotto MySQL

Microsoft Access. Microsoft Access. Maurizio Rebaudengo, Paolo Garza 1. Microsoft Access. Creazione base di dati. Apertura di una base dati

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

Linguaggio SQL: fondamenti D B M G

CORSO ACCESS 2000 PARTE VI

Alessandra Raffaetà. Esercizio: Cinema

S.I.T. PER LA VALUTAZIONE E GESTIONE DEL TERRITORIO Corso di Laurea Magistrale in Scienze Ambientali. Alessandra Raffaetà

Laboratorio di Progettazione Web

Le basi di dati. Le basi di dati. dalla teoria all'utilizzo di tutti i giorni. Alessandro Tanasi

Microsoft Access (parte 5) Query. Query. Query. Query. Creare una query

Istruzione SELECT: fondamenti Interrogazioni nidificate Operatori insiemistici Istruzioni di aggiornamento Gestione delle tabelle

SQL-DDL. Basi di Dati. Prof. Alfredo Cuzzocrea Università degli Studi di Trieste

Transcript:

Istruzioni DML Istruzioni DML pag. 2 Inserimento dati in una tabella : INSERT pag. 2 Aggiornamento dati in una tabella : UPDATE pag. 6 Cancellazione record in una tabella : DELETE pag. 10 Esercizi di riepilogo pag. 13 Bibliografia pag. 14 appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 1 -

Istruzioni DML Una delle principali funzioni di un database è quella di consentire la manipolazione dei dati contenuti nelle tabelle. Gli utenti devono essere in grado di inserire, aggiornare e cancellare i dati necessari per mantenere aggiornato il database e garantire che vengano introdotti solo dati corretti. Le istruzioni DML (Data Manipulation Language), fornite da SQL, vengono utilizzate per aggiungere, modificare o cancellare i dati memorizzati nelle tabelle del database. L istruzione INSERT consente di aggiungere dati ad una tabella, l istruzione UPDATE consente di modificare i dati contenuti in una tabella e l istruzione DELETE consente di cancellare i dati memorizzati in una tabella. Inserimento dati in una tabella : INSERT L istruzione INSERT consente di aggiungere dati alle tabelle del database secondo la seguente sintassi : INSERT INTO <nome tabella> [ ( <nome colonna> [ {, <nome colonna> }...] ) ] VALUES ( <valore> [ {, <valore>}... ] ) Sono obbligatorie solo la prima e l ultima riga della sintassi mentre la seconda riga è opzionale. Sia la prima che la seconda riga fanno parte della clausola INSERT INTO in cui occorre identificare il nome della tabella in cui si stanno inserendo i dati. Il nome della tabella è specificato dopo le parole riservate INSERT INTO. Quindi si ha la possibilità, nella seconda riga della sintassi, di identificare il nome delle colonne che riceveranno i dati. E possibile specificare una o più colonne, il tutto incluso fra parentesi tonde. Se si specificano più colonne, queste devono essere separate da una virgola. Se si specifica il nome delle colonne, tutte le colonne della tabella di destinazione che non sono state specificate devono supportare l impiego di valori null o devono essere definite con un valore di default; in caso contrario il database non saprà quale valore inserire in queste colonne. Nella terza riga della sintassi, riguardante la clausola VALUES, occorre specificare uno o più valori che verranno inseriti nella tabella. I valori devono essere racchiusi fra parentesi e, se ne viene specificato più d uno, devono essere separati da una virgola. I valori, inoltre, devono rispondere ai seguenti requisiti : appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 2 -

Ciascun valore di tipo stringa (carattere) deve essere racchiuso fra singoli o doppi apici Se nella clausola INSERT INTO non vengono specificate le colonne, allora vi deve essere un valore per ciascuna colonna della tabella ed i valori devono essere esattamente nello stesso ordine in cui sono stati definiti nella tabella. Si supponga di avere una tabella definita dalla seguente struttura : Tabella Nome campo Chiave Tipo dati Dim. Dec. Null Descrizione tbdipendenti Matricola Primaria Intero 4 Cognome Carattere 20 Nome Carattere 20 Indirizzo Carattere 40 SI CodiceFiscale Carattere 16 SI Vincolo : valori unici L istruzione che consente di inserire un nuovo record è la seguente : INSERT INTO tbdipendenti VALUES (1, "ROSSI", "MARIO", "VIA MAZZINI, 7", Null); oppure : INSERT INTO tbdipendenti VALUES (1, 'ROSSI', 'MARIO', 'VIA MAZZINI, 7', Null); Matricola Cognome Nome Indirizzo CodiceFiscale 1 ROSSI MARIO VIA MAZZINI, 7 INSERT INTO tbdipendenti VALUES (1, 'ROSSI', 'MARIO', 'VIA MAZZINI, 7'); è errata in quanto manca il valore corrispondente alla colonna CodiceFiscale. Se la colonna può accettare il valore Null è sufficiente indicare tale valore per la colonna, se non si attribuisce uno specifico valore. L istruzione, pertanto, corretta è : INSERT INTO tbdipendenti VALUES (1, 'ROSSI', 'MARIO', 'VIA MAZZINI, 7',Null); INSERT INTO tbdipendenti VALUES (1, 'ROSSI', Null, 'VIA MAZZINI, 7', Null); è errata in quanto si è attribuito il valore Null alla colonna Nome che, dalla definizione della tabella, risulta non accettare tale valore. Per correggere l istruzione è sufficiente attribuire alla colonna un valore qualsiasi, purché diverso da Null. appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 3 -

Se nella clausola INSERT INTO vengono specificate delle colonne, vi deve essere esattamente un valore per la colonna specificata e tutti i valori devono trovarsi esattamente nello stesso ordine in cui sono stati definiti nella clausola INSERT INTO. Tuttavia le colonne ed i valori non devono necessariamente essere nello stesso ordine in cui si trovano nella tabella. Con la seguente istruzione si inserisce un nuovo record specificando solo i valori corrispondenti alle colonne indicate nella clausola INSERT INTO : INSERT INTO tbdipendenti ( Matricola, Cognome, Nome ) VALUES (2, 'VERDI', 'LUCA'); Matricola Cognome Nome Indirizzo CodiceFiscale 1 ROSSI MARIO VIA MAZZINI, 7 2 VERDI LUCA Lo stesso risultato si ottiene con la seguente istruzione in cui nella clausola INSERT INTO l elenco delle colonne non è lo stesso di quello utilizzato nella definizione della tabella : INSERT INTO tbdipendenti (Nome, Cognome, Matricola ) VALUES ('FRANCA', 'BIANCHI', 3); è importante, come si può notare, la corrispondenza fra il nome della colonna ed il valore ad essa associato. Matricola Cognome Nome Indirizzo CodiceFiscale 1 ROSSI MARIO VIA MAZZINI, 7 2 VERDI LUCA 3 BIANCHI FRANCA INSERT INTO tbdipendenti (Cognome, Matricola ) VALUES ('BIANCHI', 3); è errata in quanto nell elenco delle colonne non è indicata la colonna Nome che, dalla definizione della tabella, non può assumere il valore Null. Nota : nel caso in cui la chiave primaria viene definita come contatore, la colonna corrispondente può essere omessa dall elenco in quanto il nuovo record inserito avrebbe, in tale colonna un valore, pari all incremento impostato in fase di definizione. appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 4 -

Una colonna può, nella creazione di una tabella, essere definita come contatore nei seguenti modi : In Microsoft Jet (ACCESS, DAO) : NomeColonna Counter per, es. : Matricola Counter In SQL Server o ADO : NomeColonna TipoDato IDENTITY(ValoreIniziale, Incremento) per, es. : Matricola int IDENTITY (in questo modo il valore iniziale e l incremento, per default, sono uguali a 1.) Se il campo Matricola, per es., viene definito come contatore, l istruzione successiva è corretta : INSERT INTO tbdipendenti (Cognome, Nome ) VALUES ('VERDONE', 'VITO'); In questo caso il record inserito avrebbe nel campo Matricola un valore uguale a 4: Matricola Cognome Nome Indirizzo CodiceFiscale 1 ROSSI MARIO VIA MAZZINI, 7 2 VERDI LUCA 3 BIANCHI FRANCA 4 VERDONE VITO Ovviamente è anche corretta, ma non consigliabile l uso altrimenti viene a decadere il concetto di contatore, la seguente istruzione : INSERT INTO tbdipendenti (Matricola,Cognome, Nome ) VALUES (8,'VERDONE', 'VITO'); Matricola Cognome Nome Indirizzo CodiceFiscale 1 ROSSI MARIO VIA MAZZINI, 7 2 VERDI LUCA 3 BIANCHI FRANCA 8 VERDONE VITO Nota : i valori specificati nella clausola VALUES devono rispondere a tutte le restrizioni imposte sulla tabella. Questo significa che i valori devono essere conformi ai tipi di dati e ai domini associati alla colonna. Inoltre i valori sono limitati dai vincoli imposti sulla tabella. Per esempio, un vincolo a chiave esterna può limitare l intervallo di valori che possono essere inseriti nella tabella. Occorre, quindi, assicurarsi di conoscere le restrizioni imposte su una tabella prima di tentare di inserirvi dei dati. appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 5 -

Aggiornamento dati in una tabella : UPDATE L istruzione UPDATE consente di aggiornare i dati contenuti in un database. Col questa istruzione è possibile modificare i dati contenuti in una o più righe e una o più colonne. La sintassi dell istruzione UPDATE è la seguente : UPDATE <nome tabella> SET <nome colonna> = <espressione> [{,<nome colonna> = < espressione>}...] [WHERE <condizione di ricerca>] Come si può notare, la clausola UPDATE e SET sono obbligatorie mentre la clausola WHERE è opzionale. Nella clausola UPDATE occorre specificare il nome della tabella che si sta aggiornando. Nella clausola SET occorre specificare una o più espressioni. Nella clausola WHERE occorre specificare una condizione o in insieme di condizioni che fungono da filtro per le righe che vengono aggiornate. Verranno, pertanto, aggiornate solo le righe che restituiscono il valore vero (true) per la condizione specificata. E importante sottolineare che se la condizione proposta nella clausola WHERE prende in considerazione la chiave primaria si aggiorna un solo record altrimenti si aggiornano tutti quei record che soddisfano la condizione. La clausola SET include il termine <nome colonna> = <espressione>. E possibile specificare una o più espressioni, in tal caso occorre separarle con una virgola. Fondamentalmente occorre specificare una colonna (della tabella che si sta aggiornando) e fornire un valore da assegnare alla colonna. Si supponga di avere una tabella definita dalla seguente struttura : Tabella Nome campo Chiave Tipo dati Dim. Dec. Null Descrizione tbarticoli idarticolo Primaria Intero 4 Articolo Carattere 30 CostoAcquisto Numerico 6 2 SI PrezzoVendita Numerico 6 2 SI Sconto Numerico 4 2 SI Giacenza Intero 4 Categoria Carattere 10 e contenente i seguenti dati : appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 6 -

idarticolo Articolo CostoAcquisto PrezzoVendita Sconto Giacenza Categoria 1 CARTUCCIA FAX 10 15 5 4 Cartuccia 2 CARTUCCIA COLORE 3 5 5 3 Cartuccia 3 CARTUCCIA NERO 6 9 15 5 Cartuccia 4 COPRISTAMPANTE 4 5 10 4 Accessori 5 MODEM USB 56K 4 6 20 2 Modem 6 MODEM 128K USB 3 5 0 3 Modem 7 MONITOR 15 3 5 0 1 Video 8 MONITOR 17 2 4 5 2 Video 9 MOUSE 2 4 5 5 Mouse 10 MOUSE SERIALE 4 5 0 1 Mouse 11 SCHEDA DI RETE 15 18 0 2 Scheda UPDATE tbarticoli SET Sconto = 10; modifica ogni riga della tabella tbarticoli in modo che la colonna Sconto di ogni riga contenga il valore 10 : idarticolo Articolo CostoAcquisto PrezzoVendita Sconto Giacenza Categoria 1 CARTUCCIA FAX 10 15 10 4 Cartuccia 2 CARTUCCIA COLORE 3 5 10 3 Cartuccia 3 CARTUCCIA NERO 6 9 10 5 Cartuccia 4 COPRISTAMPANTE 4 5 10 4 Accessori 5 MODEM USB 56K 4 6 10 2 Modem 6 MODEM 128K USB 3 5 10 3 Modem 7 MONITOR 15 3 5 10 1 Video 8 MONITOR 17 2 4 10 2 Video 9 MOUSE 2 4 10 5 Mouse 10 MOUSE SERIALE 4 5 10 1 Mouse 11 SCHEDA DI RETE 15 18 10 2 Scheda Naturalmente questa è un operazione legittima ma in realtà è molto improbabile che si debba cambiare il valore di una colonna di tutte le righe di una tabella in modo da renderle tutti uguali. E molto più probabile che si voglia qualificare l aggiornamento tramite la clausola WHERE. UPDATE tbarticoli SET Sconto = 10 WHERE Sconto = 0 cambia il contenuto della colonna Sconto in 10 ma esegue l operazione solo per le righe che rispondono alla condizione di ricerca contenuta nella clausola WHERE, ovvero per le righe in cui lo Sconto è uguale a 0. Rispetto alla tabella originale, il risultato è il seguente : appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 7 -

idarticolo Articolo CostoAcquisto PrezzoVendita Sconto Giacenza Categoria 1 CARTUCCIA FAX 10 15 5 4 Cartuccia 2 CARTUCCIA COLORE 3 5 5 3 Cartuccia 3 CARTUCCIA NERO 6 9 15 5 Cartuccia 4 COPRISTAMPANTE 4 5 10 4 Accessori 5 MODEM USB 56K 4 6 20 2 Modem 6 MODEM 128K USB 3 5 10 3 Modem 7 MONITOR 15 3 5 10 1 Video 8 MONITOR 17 2 4 5 2 Video 9 MOUSE 2 4 5 5 Mouse 10 MOUSE SERIALE 4 5 10 1 Mouse 11 SCHEDA DI RETE 15 18 10 2 Scheda Se, come già detto, nella condizione di ricerca della clausola WHERE è specificata la chiave primaria, allora viene aggiornata solo la riga il cui valore coincide con quello indicato nell espressione. UPDATE tbarticoli SET Sconto = 10 WHERE idarticolo = 1 modifica il valore della colonna Sconto solo in corrispondenza dell unica riga, in quanto si tratta della chiave primaria, la cui colonna idarticolo è uguale a 1. Si potrebbe,inoltre, avere l esigenza di cambiare un valore sulla base del valore preesistente, per esempio facendo riferimento alla giacenza attualmente disponibile. Per esempio si può sommare 5 al valore attualmente contenuto nella colonna Giacenza. UPDATE tbarticoli SET Giacenza = (Giacenza + 5); aggiunge, nella colonna Giacenza, 5 a tutte le righe della tabella, in quanto non viene specificata la clausola WHERE. Rispetto alla tabella originale, il risultato è il seguente : idarticolo Articolo CostoAcquisto PrezzoVendita Sconto Giacenza Categoria 1 CARTUCCIA FAX 10 15 5 9 Cartuccia 2 CARTUCCIA COLORE 3 5 5 8 Cartuccia 3 CARTUCCIA NERO 6 9 15 10 Cartuccia 4 COPRISTAMPANTE 4 5 10 9 Accessori 5 MODEM USB 56K 4 6 20 7 Modem 6 MODEM 128K USB 3 5 0 8 Modem 7 MONITOR 15 3 5 0 6 Video 8 MONITOR 17 2 4 5 7 Video 9 MOUSE 2 4 5 10 Mouse 10 MOUSE SERIALE 4 5 0 6 Mouse 11 SCHEDA DI RETE 15 18 0 7 Scheda L espressione utilizzata per effettuare la modifica può, ovviamente, essere anche più complessa. appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 8 -

La seguente istruzione consente di aumentare lo Sconto del 10% in tutte le righe della tabella in cui il valore dello Sconto è maggiore o uguale a 10. UPDATE tbarticoli SET Sconto = Sconto+(Sconto*10)/100 WHERE Sconto >=10; Rispetto alla tabella originale, il risultato è il seguente : idarticolo Articolo CostoAcquisto PrezzoVendita Sconto Giacenza Categoria 1 CARTUCCIA FAX 10 15 5 4 Cartuccia 2 CARTUCCIA COLORE 3 5 5 3 Cartuccia 3 CARTUCCIA NERO 6 9 16,5 5 Cartuccia 4 COPRISTAMPANTE 4 5 11 4 Accessori 5 MODEM USB 56K 4 6 22 2 Modem 6 MODEM 128K USB 3 5 0 3 Modem 7 MONITOR 15 3 5 0 1 Video 8 MONITOR 17 2 4 5 2 Video 9 MOUSE 2 4 5 5 Mouse 10 MOUSE SERIALE 4 5 0 1 Mouse 11 SCHEDA DI RETE 15 18 0 2 Scheda La clausola WHERE consente anche di specificare più predicati. Nel seguente esempio si raddoppia il valore della colonna relativa al PrezzoVendita per ogni riga che in cui lo Sconto è minore di 10 e la Categoria è uguale a Video : UPDATE tbarticoli SET PrezzoVendita = 2*[PrezzoVendita] WHERE Sconto<10 And Categoria='Video'; Rispetto alla tabella originale, il risultato è il seguente : idarticolo Articolo CostoAcquisto PrezzoVendita Sconto Giacenza Categoria 1 CARTUCCIA FAX 10 15 5 4 Cartuccia 2 CARTUCCIA COLORE 3 5 5 3 Cartuccia 3 CARTUCCIA NERO 6 9 15 5 Cartuccia 4 COPRISTAMPANTE 4 5 10 4 Accessori 5 MODEM USB 56K 4 6 20 2 Modem 6 MODEM 128K USB 3 5 0 3 Modem 7 MONITOR 15 3 10 0 1 Video 8 MONITOR 17 2 8 5 2 Video 9 MOUSE 2 4 5 5 Mouse 10 MOUSE SERIALE 4 5 0 1 Mouse 11 SCHEDA DI RETE 15 18 0 2 Scheda in cui è effettivamente raddoppiato il valore della colonna PrezzoVendita nelle righe il cui idarticolo è uguale a 7 ed 8, ovvero le uniche righe che soddisfano la condizione espressa nella clausola WHERE. In una clausola SET è anche possibile specificare più espressioni. In altre parole si possono cambiare i valori di più colonne per volta. Per esempio, si supponga di voler raddoppiare il valore PrezzoVendita ed azzerare il valore Sconto nelle righe in cui la Categoria è uguale a Cartuccia. L istruzione UPDATE avrà il seguente aspetto : appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 9 -

UPDATE tbarticoli SET PrezzoVendita = 2*PrezzoVendita, Sconto = 0 WHERE Categoria='Cartuccia'; Rispetto alla tabella originale, il risultato è il seguente : idarticolo Articolo CostoAcquisto PrezzoVendita Sconto Giacenza Categoria 1 CARTUCCIA FAX 10 30 0 4 Cartuccia 2 CARTUCCIA COLORE 3 10 0 3 Cartuccia 3 CARTUCCIA NERO 6 18 0 5 Cartuccia 4 COPRISTAMPANTE 4 5 10 4 Accessori 5 MODEM USB 56K 4 6 20 2 Modem 6 MODEM 128K USB 3 5 0 3 Modem 7 MONITOR 15 3 5 0 1 Video 8 MONITOR 17 2 4 5 2 Video 9 MOUSE 2 4 5 5 Mouse 10 MOUSE SERIALE 4 5 0 1 Mouse 11 SCHEDA DI RETE 15 18 0 2 Scheda in cui sono state modificate le prime tre righe in base alle espressioni e alla condizione presente nell istruzione. appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 10 -

Cancellazione record in una tabella : DELETE Una volta che i record di una tabella sono stati inseriti e/o modificati, è possibile che si debba provvedere alla loro cancellazione. La eliminazione di dati da una tabella avviene tramite l istruzione DELETE secondo la seguente sintassi : DELETE FROM <nome tabella> [WHERE <condizione di ricerca>] Come si può notare, la clausola DELETE FROM richiese che venga specificato il nome della tabella dalla quale si stanno cancellando le righe. La clausola WHERE richiede che venga specificata la condizione di ricerca. Se non si include la clausola WHERE, l istruzione DELETE cancellerà tutte le righe della tabella specificata. Nota : l istruzione DELETE può cancellare solo le righe di una tabella; non può cancellare la definizione dei dati contenuti nella tabella. Per cancellare i dati e la loro definizione si deve usare l istruzione DROP TABLE. Si noti che nell istruzione DELETE on vengono indicati i nome delle colonne; questo è dovuto al fatto che non è possibile cancellare da una tabella solo i valori di determinate colonne. E possibile solo cancellare intere righe. Per cancellare il nome di una determinata colonna si usa l istruzione UPDATE che assegna alla colonna il valore nullo. Naturalmente ciò è possibile solo se la colonna supporta i valori null. DELETE FROM tbarticoli ; cancella tutte le righe della tabella tbarticoli. DELETE FROM tbarticoli WHERE Sconto = 0 cancella tutte le righe della tabella in cui il valore della colonna Sconto è uguale a 0. Naturalmente, come già visto nell istruzione UPDATE, la clausola WHERE consente anche di specificare più predicati. In effetti la clausola WHERE consente di specificare esattamente quali righe devono essere cancellate dalla tabella. DELETE FROM tbarticoli WHERE Sconto = 0 AND Giacenza = 0; cancella tutte le righe, se ovviamente esistono, in cui i valori della colonna Sconto e della colonna Giacenza sono uguali a 0. appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 11 -

Se la chiave primaria è di tipo contatore, se si cancella e poi si inserisce il contatore cosa fa? Osservazione : si supponga si avere la tabella tbprofessioni definita con i campi idprofessione (contatore) e Professione (carattere). La chiave primaria è il campo idprofessione. La tabella contiene, per es., i seguenti dati : idprofessione Professione 1 Operaio 2 Insegnante 3 Medico 4 Ingegnere 5 Avvocato 6 Impiegato es. : Se sulla tabella viene effettuata un istruzione per la cancellazione di una riga, per DELETE FROM tbprofessioni WHERE idprofessione=4; e successivamente un istruzione per l inserimento di una nuova riga, per es. : INSERT INTO tbprofessione (Professione) VALUES ('Infermiere'); il risultato ottenuto è il seguente : idprofessione Professione 1 Operaio 2 Insegnante 3 Medico 5 Avvocato 6 Scrittore 7 Infermiere Come si può notare la riga corrispondente al valore 4 della colonna idprofessione non è stata sostituita dal nuovo inserimento ma, il valore attribuito alla nuova riga inserita è esattamente uguale al valore dell ultima riga della tabella incrementato di 1. Quindi i valori assunti da una chiave primaria, definita come contatore, non possono essere più recuperati in caso di cancellazione. Questo, ovviamente, non accade se la chiave primaria è definita con un altro tipo di dati (intero, carattere, ecc.). appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 12 -

ESERCIZI Si supponga di avere una tabella definita dalla seguente struttura : Tabella Nome campo Chiave Tipo dati Dim. Dec. Null Descrizione tbdipendenti Matricola Primaria Intero 4 Cognome Carattere 20 Nome Carattere 20 Indirizzo Carattere 40 SI Telefono Carattere 15 SI Comune Carattere 20 SI Inserire una nuova riga nella tabella specificando tutte le colonne ed i valori corrispondenti : INSERT INTO tbdipendenti ( Codice, Cognome, Nome, Indirizzo, Telefono) VALUES ( 15, 'PICCOLO', 'MARCO', 'Via Lombardia, 14', '099222222' ) Inserire nella colonna Comune il nome del comune NAPOLI in base al prefisso telefonico indicato nella colonna Telefono (081). UPDATE tbdipendenti SET Comune='NAPOLI' WHERE Telefono >= '081' AND Telefono < '082' Tabella prima dell aggiornamento : Matricola Nome Cognome Indirizzo Telefono Comune 1 Mario Rossi 0995334789 2 Antonio Verdi 0812542112 3 Monica Marzo 068974521 4 Luca Bianchi 0812465679 5 Francesca Roma 0801527821 6 Giovanna Verdone 0263452156 appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 13 -

Tabella dopo l aggiornamento : Matricola Nome Cognome Indirizzo Telefono Comune 1 Mario Rossi 0995334789 2 Antonio Verdi 0812542112 NAPOLI 3 Monica Marzo 068974521 4 Luca Bianchi 0812465679 NAPOLI 5 Francesca Roma 0801527821 6 Giovanna Verdone 0263452156 BIBLIOGRAFIA Titolo Autore Casa Editrice Visual Basic 6.0 Accesso ai database Jeffrey P. McManus Mondadori Le basi di dati Il linguaggio SQL Lorenzi - Rossi Atlas Fondamenti di SQL Robert Sheldon Mc GRAW HILL SQL I Portatili Mondadori Programmare Visual Basic 6.0 Francesco Balena Mondadori Visual Basic 6.0 Guida per lo sviluppatore di database MSDN Library (Visual Studio 6.0) Roger Jennings Microsoft Mondadori appunti rielaborati dai testi indicati nella bibliografia (a cura del Prof. Salvatore DE GIORGI) pag. - 14 -