Inserire informazioni nelle tabelle

DML è l’acronimo di Data Manipulation Language, ovvero un sottoinsieme di comandi SQL che consentono agli utenti di operare sui dati di un database: sono inclusi i comandi:

  • SELECT per interrogare le tabelle e le viste di un database,
  • INSERT per aggiungere nuove righe in una tabella,
  • UPDATE per modificare righe già esistenti in una tabella,
  • DELETE per cancellare righe anch’esse esistenti.

Sono disponibili anche altri comandi DML. Ma noi ci soffermeremo esclusivamente su quelli appena elencati, che sono i più utilizzati.

I comandi DML si distinguono da quelli DDL (Data Definition Language) in quanto questi ultimi sono utilizzati per creare, modificare, cancellare o rinominare le strutture logiche. Alcuni esempi di comandi D.D.L.: CREATEALTERDROPRENAME.

Inserire righe in una tabella

Il comando INSERT è usato per aggiungere nuove righe ad una tabella. Abbiamo già visto che creare la copia di una tabella consente di costruire in modo automatico la struttura di una nuova tabella ma ma anche di inserire le righe presenti nella tabella di origine. Il metodo classico per inserire nuove righe, ovviamente, non prevede anche la creazione di una tabella, ma presuppone una tabella già esistente.

Sintassi del comando INSERT

INSERT INTO <nome tabella> <(nomi di colonna)> VALUES <(valori di input)>;

Se vogliamo inserire una riga e dare un valore a tutti i campi (colonne) di cui è composta, possiamo omettere il parametro <(nomi di colonna)> (altrimenti dovremmo elencare tutte le colonne della tabella). Il parametro <(valori di input)> indica l’insieme di valori da inserire. Può prendere i vaolori anche da uno comando SELECT.

Nella lezioni precedenti abbiamo creato una tabella “contatti”. Facciamo riferimento alla struttura di questa tabella che ci servirà per meglio comprendere il comando INSERT INTO.

Figura 1. Struttura della tabella “contatti”

Struttura della tabella "contatti"

Proviamo ora ad inserire alcune nuove righe.

SQL> INSERT INTO contatti VALUES (1, 'Ranzani', 'Daniele', 
  2  'Via Casale, 35', 'Ardea', 'RM', '00040', '06/768766', NULL, 
  3  'daniele.ranzani@mymail.it', TO_DATE ('28-Dic-1965', 'DD-MON-YYYY'),
  4  'Coniugato');

Visualizziamo il contenuto della tabella con la seguente query

SQL> SELECT * FROM contatti;

Sarà visualizzata la riga appena inserita. Analizziamo il comando INSERT INTO appena eseguito. I dati da inserire sono stati forniti rispettando l’ordine delle colonne del comandoDESCRIBE, ovvero quello scelto in fase di creazione tabella.

  • 1 è il valore numerico che abbiamo associato al campo IDContatto. Avremo cura di aumentare questo valore ogni qualvolta inseriremo una nuova riga. Lo scopo di questo campo è quello di simulare il contatore numerico usato in Microsoft Access ma, per farlo, dovremmo usare le sequenze Oracle. Queste saranno spiegate in una successiva lezione. Per ovviare incrementeremo noi manualmente questo valore numerico ad ogni inserimento di una nuova riga;
  • ogni campo all’interno di VALUES viene separato dall’altro mediante una virgola. Tutti quelli racchiusi tra virgolette (‘ ‘) sono stringhe alfanumeriche, ovvero di datatypeVARCHAR2 o CHAR;
  • il valore NULL lo utilizziamo ogni volta che non disponiamo del valore da inserire nella corrispondente colonna, sempre che questa consenta l’inserimento di un valoreNULL. Prossimamente analizzeremo il vincolo NOT NULL che consente, ad una colonna a cui è stata aggiunta tale clausola in fase di definizione, di non accettare valori NULL;

la funzione TO_DATE permette la conversione di una stringa, che rappresenta una data, in un datatype DATE. Accetta due parametri di ingresso: il primo è la data da inserire in tabella scritta in formato stringa (infatti è racchiusa fra le virgolette), mentre il secondo parametro, anch’esso di tipo stringa, indica il metodo per “decifrare” il primo. Nel nostro caso abbiamo fornito il giorno con un numero a due cifre (DD), il mese con tre lettere (MON) e l’anno con un numero a quattro cifre (YYYY).

Inseriamo una nuova riga:

SQL> INSERT INTO contatti VALUES (2, 'Rossi', 'Maria', 
  2  'Via San Luca, 43', 'Martina Franca', 'TA', '74015', '080/764646', '333-123456',
  3  'maria.rossi@myworld.it', TO_DATE ('13-Mar-1974', 'DD-MON-YYYY'), 
  4  'Nubile');

Nell’esempio successivo vediamo invece come è possibile inserire una nuora riga quando non siamo a conoscenza dei dati per tutte le colonne. In questo caso conosciamo solamente tre valori di colonna. Per le rimanenti nove colonne Oracle inserirà valori NULL.

SQL> INSERT INTO contatti (IDContatto, Cognome, Nome) VALUES (3, 'Ferrarris', 
  2  'Nunzio');

Proviamo ora ad inserire alcune righe in una tabella che è formata anche da alcune colonne che accettano valori di DEFAULT. Usiamo la tabella “impiegati”, creata nella lezione precedente.

Figura 1. Struttura della tabella “impiegati”

Struttura della tabella "impiegati"

Inseriamo quindi le seguenti righe:

SQL> INSERT INTO impiegati VALUES (1, 'Rastrelli Marco', DEFAULT, 'Pomezia',  
  2  DEFAULT);

SQL> INSERT INTO impiegati VALUES (2, 'Rosolini Francesca', 
  2  TO_DATE ('12-Mar-2006', 'DD-MON-YYYY'), DEFAULT, DEFAULT);

Nel primo esempio abbiamo espressamente usato la clausola DEFAULT per le colonne Data_Assunz e UtenteDB. Il campo Data_Assunz ha come valore di DEFAULT quello restituito dalla funzione SYSDATE, ovvero la data e l’ora nel momento in cui viene inserita la riga. Per il campo UtenteDB il valore di DEFAULT è fornito dalla funzione USER che restituisce il nome dell’utente che effettua l’inserimento.

Nel secondo esempio abbiamo utilizzato la clausola DEFAULT anche per il campo Paese_Residenza, facendo inserire automaticamente ad Oracle la stringa ‘Roma’.

Nella precedente lezione, come dicevamo prima, abbiamo anche visto il metodo per creare copie di tabelle, includendo sia la struttura che i dati contenuti nella tabella di origine. Il seguente è stato un esempio:

SQL> CREATE TABLE copia_contatti
  2  AS SELECT * FROM contatti;

Considerato che nel corso della lezione precedente la tabella contatti era priva di righe, allora abbiamo potuto creare solamente la struttura della tabella “copia_contatti”. Vediamo ora una forma particolare di INSERT INTO che consente di inserire delle righe provenienti da un’altra tabella. Lo si fa specificando lo statement SELECT alla fine dell’istruzione.

SQL> INSERT INTO copia_contatti
  2  SELECT * FROM contatti
  3  WHERE (IDContatto >= 2) AND (IDContatto <= 5);

Sono state inserite nella tabella copia_contatti, che ha la stessa struttura della tabella contatti, le righe provenienti dalla tabella contatti che soddisfano la condizione specificata con ls clausola WHERE.

Both comments and pings are currently closed.

Comments are closed.