Casa / Esercitazioni di Windows / Transact-SQL: inserimento di dati. Query SQL INSERT INTO - riempie il database con le informazioni Inserisci nella sintassi

Transact-SQL: inserimento di dati. Query SQL INSERT INTO - riempie il database con le informazioni Inserisci nella sintassi

Nelle sezioni precedenti, abbiamo considerato il lavoro per ottenere dati da tabelle precreate. Ora è il momento di capire come possiamo creare/eliminare tabelle, aggiungere nuovi record ed eliminare quelli vecchi. Per questi scopi in SQL ci sono operatori come: CREARE- crea una tabella ALTER- cambia la struttura della tabella, FAR CADERE- cancella una tabella o un campo, INSERIRE- aggiunge i dati alla tabella. Iniziamo la nostra conoscenza con questo gruppo di operatori dall'operatore INSERIRE.

1. Aggiunta di intere righe

Come suggerisce il nome, l'operatore INSERIRE utilizzato per inserire (aggiungere) righe in una tabella di database. L'aggiunta può essere eseguita in diversi modi:

  • - aggiungi una riga intera
  • - aggiungi parte di una stringa
  • - aggiungi i risultati della query.

Quindi, per aggiungere una nuova riga alla tabella, dobbiamo specificare il nome della tabella, elencare i nomi delle colonne e specificare il valore per ciascuna colonna usando il costrutto INSERIRE nome_tabella (campo1, campo2 ...) I VALORI (valore1, valore2...). Diamo un'occhiata a un esempio.

INSERISCI NEI VALORI Venditori (ID, Indirizzo, Città, Nome_venditore, Paese).("6", "1st Street", "Los Angeles", "Harry Monroe", "USA")

Puoi anche cambiare l'ordine dei nomi delle colonne, ma allo stesso tempo devi cambiare l'ordine dei valori nel parametro I VALORI.

2. Aggiunta di parte delle linee

Nell'esempio precedente, quando si utilizza l'operatore INSERIRE abbiamo contrassegnato esplicitamente i nomi delle colonne della tabella. Usando questa sintassi, possiamo saltare alcune colonne. Ciò significa che inserisci un valore per alcune colonne ma non fornisci valori per altre. Per esempio:

INSERISCI NEI VALORI venditori (ID, città, nome_venditore).("6", "Los Angeles", "Harry Monroe")

A questo esempio non abbiamo specificato un valore per due colonne indirizzo e Paese. È possibile escludere alcune colonne dall'istruzione INSERIRE, se consente la definizione della tabella. In questo caso deve essere soddisfatta una delle seguenti condizioni: questa colonna è definita come consentendo il valore NULLO(l'assenza di qualsiasi valore) o nella definizione della tabella il valore predefinito specificato. Ciò significa che se non viene specificato alcun valore, verrà utilizzato il valore predefinito. Se salti una colonna in una tabella che non consente valori nelle sue righe NULLO e non ha un valore predefinito definito, il DBMS emetterà un messaggio di errore e questa riga non verrà aggiunta.

3. Aggiunta di dati selezionati

Negli esempi precedenti, abbiamo inserito i dati nelle tabelle scrivendoli manualmente nella query. Tuttavia, l'operatore INSERIRE ci permette di automatizzare questo processo se vogliamo inserire dati da un'altra tabella. Per fare ciò, SQL ha una struttura come questa: INSERISCI IN... SCEGLI.... Questo design consente di selezionare contemporaneamente i dati da una tabella e inserirli in un'altra. Supponiamo di avere un'altra tabella Venditori_UE con un elenco di venditori delle nostre merci in Europa e dobbiamo aggiungerli alla tabella generale Venditori. La struttura di queste tabelle è la stessa (stesso numero di colonne e stessi nomi), ma dati diversi. Per fare ciò, possiamo scrivere la seguente query:

INSERT IN Venditori (ID, Indirizzo, Città, Nome_venditore, Paese) SELEZIONAID, indirizzo, città, nome_venditore, paese FROM Sellers_EU

Bisogna fare attenzione che il valore delle chiavi interne non venga ripetuto (campo ID), altrimenti si verificherà un errore. Operatore SELEZIONARE può includere anche suggerimenti DOVE per filtrare i dati. Si segnala inoltre che il DBMS non presta attenzione ai nomi delle colonne contenute nel prospetto SELEZIONARE, solo l'ordine della loro disposizione è importante per lei. Pertanto, i dati nella prima colonna specificata che è stata selezionata a causa di SELEZIONARE, verrà comunque compilata nella prima colonna della tabella Venditori specificato dopo l'operatore INSERIRE, indipendentemente dal nome del campo.

4. Copiare i dati da una tabella all'altra

Spesso, quando si lavora con i database, diventa necessario creare copie di qualsiasi tabella a scopo di backup o modifica. Per eseguire una copia completa di una tabella in SQL, viene fornita un'istruzione separata SELEZIONA IN. Ad esempio, dobbiamo creare una copia della tabella Venditori, dovrai scrivere la richiesta come segue:

SELEZIONA * IN Venditori_nuovo DA Venditori

A differenza del modello precedente INSERISCI IN... SCEGLI... quando i dati vengono aggiunti a una tabella esistente, il costrutto copia i dati nella nuova tabella. Si può anche dire che il primo costrutto importa i dati, mentre il secondo costrutto esporta. Quando si utilizza la struttura SELEZIONA ... IN ... DA ... si dovrebbe tenere conto di quanto segue:

  • - puoi usare qualsiasi frase nell'operatore SELEZIONARE, come RAGGRUPPA PER e AVENDO
  • - join può essere utilizzato per aggiungere dati da più tabelle
  • - i dati possono essere aggiunti solo a una tabella, indipendentemente dal numero di tabelle da cui sono stati presi.

Usando SQL, puoi copiare le informazioni da una tabella all'altra.

L'istruzione INSERT INTO SELECT copia i dati da una tabella e li inserisce in una tabella esistente.

Istruzione SQL INSERT INTO SELECT,

L'istruzione INSERT INTO SELECT seleziona i dati da una tabella e li inserisce in una tabella esistente. Eventuali righe esistenti nella tabella di destinazione non vengono modificate.

SQL INSERT IN SELECT, Sintassi

Possiamo copiare tutte le colonne da una tabella a un'altra tabella esistente:

INSERIRE Tavolo 2
SCELTO DA Tabella 1;

Oppure possiamo solo copiare le colonne che vogliamo in un'altra tabella esistente:

INSERIRE Tavolo 2
(nome_colonna/i)
SELEZIONARE nome_colonna/i
DA Tabella 1;

Banca dati demo

In questo tutorial utilizzeremo il noto database Northwind.

Di seguito una selezione dalla tabella "Clienti":

ID utentenome del clienteLa persona di contattoIndirizzocittàCodice postalePaese
1 Alfred Futterkiste Maria Anders Obere Str. 57 Berlino 12209 Germania
2 Ana Trujillo Emparedados e helados Ana Trujillo Avda. de la Costituzione 2222 Messico DF 05021 Messico
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Messico DF 05023 Messico

E una selezione dalla tabella "Fornitori":

SQL INSERT IN SELECT, Esempi

Copiando solo alcune colonne da "Fornitori" in "Clienti":

Copia solo i fornitori tedeschi in "Clienti".

In cosa è INSERT IN?

L'obiettivo principale dei sistemi di database è archiviare i dati nelle tabelle. I dati sono generalmente forniti da programmi applicativi eseguiti sul database. A tal fine, SQL dispone del comando INSERT utilizzato per archiviare i dati in una tabella. Il Il comando INSERT crea una nuova riga nella tabella per memorizzare i dati.

Sintassi di base

Diamo un'occhiata alla sintassi di base del comando SQL INSERT mostrato di seguito.

INSERT INTO `table_name`(colonna_1,colonna_2,...) VALORI (valore_1,valore_2,...);

  • INSERIRE IN `table_name`è il comando che dice al server MySQL di aggiungere una nuova riga in una tabella denominata `table_name`.
  • (colonna_1,colonna_2,...) specifica le colonne da aggiornare nella nuova riga
  • VALORI (valore_1, valore_2,...) specifica i valori da aggiungere nella nuova riga

Quando si forniscono i valori dei dati da inserire nella nuova tabella, è necessario considerare quanto segue quando si tratta di diversi tipi di dati.

  • Tipi di dati stringa- tutti i valori di stringa devono essere racchiusi tra virgolette singole.
  • Tipi di dati numerici- tutti i valori numerici devono essere forniti direttamente senza racchiuderli tra virgolette singole o doppie.
  • Tipi di dati di data- racchiudere i valori delle date tra virgolette singole nel formato "AAAA-MM-GG".

Esempio:

Supponiamo di avere il seguente elenco di nuovi membri della libreria che devono essere aggiunti al database.

Nomi completi Data di nascita Genere indirizzo fisico indirizzo postale numero di contatto Indirizzo e-mail
Leonard Hofstadter Maschio Cresta di legno 0845738767
Sheldon Cooper Maschio Cresta di legno 0976736763
Rajesh Koothrappali Maschio fairview 0938867763
Leslie Winkle 14/02/1984 Maschio 0987636553
Howard Wolowitz 24/08/1981 Maschio Parco Sud PO Casella 4563 0987786553

Lets" INSERIRE i dati uno per uno. Inizieremo con Leonard Hofstadter. Tratteremo il numero di contatto come un tipo di dati numerico e non racchiuderemo il numero tra virgolette singole.

INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) VALORI ("Leonard Hofstadter","Maschio","Woodcrest",0845738767);

L'esecuzione dello script precedente elimina lo 0 dal numero di contatto di Leonard, poiché il valore verrà trattato come un valore numerico e lo zero (0) all'inizio viene eliminato poiché non è significativo.

Per evitare tali problemi, il valore deve essere racchiuso tra virgolette singole come mostrato di seguito -

INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) VALORI ("Sheldon Cooper","Maschio","Woodcrest", "0976736763");

Nel caso precedente, zero(0) non verrà eliminato

La modifica dell'ordine delle colonne non ha alcun effetto sulla query INSERT fintanto che i valori corretti sono stati mappati alle colonne corrette.

La query mostrata di seguito dimostra il punto precedente.

INSERT INTO `members` (`contact_number`,`gender`,`full_names`,`physical_address`)VALUES ("0938867763","Male","Rajesh Koothrappali","Woodcrest");

Le query precedenti hanno saltato la colonna della data di nascita, per impostazione predefinita MySQL inserirà valori NULL nelle colonne che vengono saltate nella query INSERT.

Inseriamo ora il record per Leslie che ha la data di nascita fornita. Il valore della data deve essere racchiuso tra virgolette singole utilizzando il formato "AAAA-MM-GG".

INSERT INTO `membri` (`nomi_completi`,`data_di_nascita`,`genere`,`indirizzo_fisico`,`numero_contatto`) VALORI ("Leslie Winkle","1984-02-14","Maschio","Woodcrest", " 0987636553");

Tutte le query precedenti hanno specificato le colonne e le hanno mappate ai valori nell'istruzione insert. Se stiamo fornendo valori per TUTTE le colonne della tabella, possiamo omettere le colonne dalla query di inserimento.

INSERT INTO `members` VALUES (9,"Howard Wolowitz","Male","1981-08-24","SouthPark","P.O. Box 4563", "0987786553", "lwolowitzemail.me");

Usiamo ora l'istruzione SELECT per visualizzare tutte le righe nella tabella dei membri. SELECT * FROM `members`;

numero_iscrizionenomi_completiGeneredata di nascitaindirizzo fisicoindirizzo postalenumero_contattoe-mail
1 Janet JonesFemmina21-07-1980 Primo piano stradale n. 4Borsa privata0759 253 542 Questo indirizzo email è protetto dagli spambots. È necessario abilitare Javascript per vederlo.
2 Janet Smith JonesFemmina23-06-1980 Melrose 123NULLONULLOQuesto indirizzo email è protetto dagli spambots. È necessario abilitare Javascript per vederlo.
3 Roberto FilMaschio12-07-1989 3a strada 34NULLO12345 Questo indirizzo email è protetto dagli spambots. È necessario abilitare Javascript per vederlo.
4 Gloria WilliamsFemmina14-02-1984 2a strada 23NULLONULLONULLO
5 Leonard HofstadterMaschioNULLOCresta di legnoNULLO845738767 NULLO
6 Sheldon CooperMaschioNULLOCresta di legnoNULLO976736763 NULLO
7 Rajesh KoothrappaliMaschioNULLOCresta di legnoNULLO938867763 NULLO
8 Leslie WinkleMaschio14-02-1984 Cresta di legnoNULLO987636553 NULLO
9 Howard WolowitzMaschio24-08-1981 Parco SudPO Casella 4563987786553 Questo indirizzo email è protetto dagli spambots. È necessario abilitare Javascript per vederlo.

Si noti che il numero di contatto di Leonard Hofstadter ha eliminato lo zero (0) dal numero di contatto. Gli altri numeri di contatto non hanno perso lo zero (0) all'inizio.

Inserimento in una tabella da un'altra tabella

Il comando INSERT può essere utilizzato anche per inserire dati in una tabella da un'altra tabella. La sintassi di base è quella mostrata di seguito.

INSERT INTO table_1 SELECT * FROM table_2;

Diamo ora un'occhiata a un esempio pratico, creeremo una tabella fittizia per le categorie di film a scopo dimostrativo. Chiameremo la nuova tabella delle categorie categorie_archivio. Lo script mostrato di seguito crea la tabella.

CREATE TABLE `categories_archive` (`category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`))

Eseguire lo script precedente per creare la tabella.

Ora inseriamo tutte le righe dalla tabella delle categorie nella tabella dell'archivio delle categorie. Lo script mostrato di seguito ci aiuta a raggiungere questo obiettivo.

INSERISCI IN `categories_archive` SELEZIONA * DA `categories`;

L'esecuzione dello script precedente inserisce tutte le righe dalla tabella delle categorie nella tabella dell'archivio delle categorie. Nota che le strutture delle tabelle dovranno essere le stesse affinché lo script funzioni. Uno script più robusto è quello che mappa i nomi delle colonne nella tabella di inserimento a quelli nella tabella contenente i dati.

La query mostrata di seguito ne mostra l'utilizzo.

INSERT INTO `categories_archive`(id_categoria,nome_categoria,osservazioni) SELEZIONA ID_categoria,nome_categoria,osservazioni DA `categorie`;

Esecuzione della query SELECT

SELEZIONA * DA `categories_archive`

fornisce i seguenti risultati mostrati di seguito.

id_categoriaNome della categoriaosservazioni
1 CommediaFilm con umorismo
2 Romanticostorie d'amore
3 epicostoria di film antichi
4 OrroreNULLO
5 fantascienzaNULLO
6 Romanzo gialloNULLO
7 azioneNULLO
8 commedia romanticaNULLO
9 Cartoni animatiNULLO
10 Cartoni animatiNULLO

Riepilogo

  • Il comando INSERT viene utilizzato per aggiungere nuovi dati in una tabella
  • I valori di data e stringa devono essere racchiusi tra virgolette singole.
  • I valori numerici non devono essere racchiusi tra virgolette.
  • Il comando INSERT può essere utilizzato anche per inserire dati da una tabella in un'altra.

L'istruzione INSERT inserisce nuovi record in una tabella. In questo caso, i valori della colonna possono essere costanti letterali o essere il risultato di una sottoquery. Nel primo caso, viene utilizzata un'istruzione INSERT separata per inserire ogni riga; nel secondo caso verranno inserite tante righe quante sono restituite dalla sottoquery.

La sintassi dell'operatore è la seguente:

    INSERIRE[(,...)]

    (I VALORI(,…) )

  1. | ( VALORI STANDARD )

Come puoi vedere dalla sintassi presentata, l'elenco delle colonne è facoltativo (le parentesi quadre nella descrizione della sintassi lo indicano). Se è assente, l'elenco dei valori inseriti deve essere completo, ovvero fornire valori per tutte le colonne della tabella. L'ordine dei valori deve corrispondere all'ordine specificato dall'istruzione CREATE TABLE per la tabella in cui sono inserite le righe. Inoltre, questi valori devono essere dello stesso tipo di dati delle colonne in cui sono inseriti. Ad esempio, considera l'inserimento di una riga nella tabella Product creata dalla seguente istruzione CREATE TABLE:

    prodotto CREA TAVOLA

    maker char (1 ) NOT NULL ,

    modello varchar(4) NOT NULL ,

    digitare varchar(7) NON NULL

Lascia che sia necessario aggiungere a questa tabella il modello PC 1157 del produttore B. Ciò può essere fatto con la seguente affermazione:

    INSERIRE NEL Prodotto

    VALORI ("B", 1157, "PC");

Se specifichi un elenco di colonne, puoi modificare l'ordine "naturale" della loro sequenza:

    INSERISCI IN Prodotto (tipo, modello, produttore)

    VALORI ("PC" , 1157 , "B" ) ;

Sembrerebbe che questa sia una caratteristica completamente non necessaria, il che rende solo il design più ingombrante. Tuttavia, vince se le colonne hanno valori predefiniti. Considera la seguente struttura della tabella:

    CREA TABELLA prodotto_D

    maker char (1 ) NULL ,

    modello varchar(4) NULL ,

    digitare varchar (7) NOT NULL DEFAULT "PC"

Nota che qui i valori di tutte le colonne hanno valori predefiniti (i primi due sono NULL e l'ultima colonna è di tipo - PC). Ora potremmo scrivere:

    INSERT INTO Product_D(modello, produttore)

    VALORI(1157 , "B" ) ;

In questo caso, il valore mancante verrà sostituito dal valore predefinito, PC, quando viene inserita una riga. Si noti che se non viene specificato alcun valore predefinito per una colonna in un'istruzione CREATE TABLE e non viene specificato alcun vincolo NOT NULL che vieta l'uso di NULL in quella colonna della tabella, il valore predefinito di NULL è implicito.

Sorge la domanda: è possibile non specificare un elenco di colonne e, tuttavia, utilizzare i valori di default? La risposta è si. Per fare ciò, invece di specificare in modo esplicito un valore, utilizzare la parola riservata DEFAULT :

    INSERIRE IN Prodotto_D

    VALORI ("B", 1158, DEFAULT);

Poiché tutte le colonne hanno valori di default, per inserire una riga con valori di default si potrebbe scrivere:

    INSERIRE IN Prodotto_D

    VALORI (DEFAULT , DEFAULT , DEFAULT ) ;

Tuttavia, esiste uno speciale costrutto DEFAULT VALUES per questo caso (vedi sintassi dell'operatore), che può essere utilizzato per riscrivere l'operatore precedente come

    INSERT IN Product_D VALORI PREDEFINITI ;

Si noti che quando si inserisce una riga in una tabella, vengono imposte tutte le restrizioni questo tavolo. Questi possono essere vincoli chiave primari o indice univoco, controlla i vincoli di tipo CHECK , i vincoli di integrità referenziale. In caso di violazione di una qualsiasi restrizione, l'inserimento della riga verrà rifiutato. Consideriamo ora il caso dell'utilizzo di una sottoquery. Supponiamo di voler inserire nella tabella Product_D tutte le righe della tabella Product relative ai modelli computer personale(tipo='PC'). Poiché i valori di cui abbiamo bisogno sono già in alcune tabelle, la formazione di righe inserite manualmente, in primo luogo, è inefficiente e, in secondo luogo, può consentire errori di input. L'uso di una sottoquery risolve questi problemi:

L'uso del simbolo "*" nella sottoquery è giustificato in questo caso, poiché l'ordine delle colonne è lo stesso per entrambe le tabelle. In caso contrario, dovrebbe essere applicato un elenco di colonne nell'istruzione INSERT o nella sottoquery o in entrambi, che corrisponderebbe all'ordine delle colonne:

Qui, come in precedenza, è possibile specificare non tutte le colonne se si desidera utilizzare i valori predefiniti esistenti, ad esempio:

In questo caso, la colonna tipo della tabella Product_D verrà impostata sul valore predefinito PC per tutte le righe inserite.

Si noti che quando si utilizza una sottoquery contenente un predicato, verranno inserite solo le righe per le quali il valore del predicato è TRUE (non SCONOSCIUTO!). In altre parole, se la colonna di tipo nella tabella Product fosse nullable e quel valore fosse presente in un numero di righe, tali righe non verrebbero inserite nella tabella Product_D.

Per superare la limitazione dell'inserimento di una singola riga in un'istruzione INSERT quando si utilizza un costruttore di riga in una clausola VALUES, un trucco artificiale consiste nell'utilizzare una sottoquery che forma una riga con una clausola UNION ALL. Quindi, se dobbiamo inserire più righe con una singola istruzione INSERT, possiamo scrivere:

    INSERIRE IN Prodotto_D

    SELECT "B" AS maker, modello 1158 AS, tipo "PC" AS

    UNIONE TUTTI

    SELEZIONA "C" , 2190 , "Laptop"

    UNIONE TUTTI

    SELEZIONA "D" , 3219 , "Stampante" ;

L'utilizzo di UNION ALL è preferibile a UNION anche se è garantito che non ci saranno righe duplicate, perché in questo caso non ci sarà la verifica dei duplicati.

Va notato che l'inserimento di più tuple utilizzando il costruttore di stringhe è già implementato in Sistema di gestione di database relazionali (DBMS) sviluppato da Microsoft Corporation.Structured Query Language è un linguaggio informatico generico utilizzato per creare, modificare e manipolare i dati nei database relazionali. server SQL 2008. Data questa possibilità, l'ultima query può essere riscritta come:

    INSERT IN Product_D VALUES

    ("B", 1158, "PC"),

    ("C" , 2190 , "Laptop") ,

Oltre all'istruzione SELECT discussa in precedenza, Data Manipulation Language (DML) contiene altre tre istruzioni: INSERT, UPDATE e DELETE. Come l'istruzione SELECT, queste tre istruzioni operano su tabelle o viste. Questo articolo riguarda l'istruzione INSERT e le altre due affermazioni sono discusse nel prossimo articolo.

INSERIRE Dichiarazione inserisce righe (o parti di righe) in una tabella. Ci sono due forme diverse questa istruzione:

INSERT tab_name [(col_list)] VALORI PREDEFINITI | VALUES (( DEFAULT | NULL | expression ) [ ,...n]) INSERT INTO nome_tab | view_name [(col_list)] (select_statement | execute_statement) Convenzioni di sintassi

La prima forma dell'istruzione consente di inserire una riga (o parte di essa) nella tabella. E la seconda forma dell'istruzione INSERT consente di inserire nella tabella il set di risultati di un'istruzione SELECT o una procedura memorizzata eseguita da un'istruzione EXECUTE. La procedura memorizzata deve restituire i dati da inserire nella tabella. Se utilizzata con un'istruzione INSERT, l'istruzione SELECT può selezionare valori da una tabella diversa o dalla stessa tabella in cui vengono inseriti i dati, purché i tipi di dati delle colonne corrispondenti siano compatibili.

Per entrambi i moduli, il tipo di dati di ogni valore inserito deve essere compatibile con il tipo di dati della colonna della tabella corrispondente. Tutte le stringhe ei dati temporanei devono essere racchiusi tra virgolette; I valori numerici non devono essere racchiusi tra virgolette.

Inserto a riga singola

Per entrambe le forme dell'istruzione INSERT, un elenco esplicito di colonne è facoltativo. L'assenza di un elenco di colonne equivale a specificare tutte le colonne della tabella.

VALORI PREDEFINITI parametro inserisce i valori di default per tutte le colonne. Le colonne con tipo di dati TIMESTAMP o proprietà IDENTITY vengono inserite di default con valori generati automaticamente dal sistema. Per le colonne di altri tipi di dati, viene inserito il valore predefinito non null corrispondente, se presente, o NULL in caso contrario. Se i valori Null non sono consentiti per una colonna e non è definito alcun valore predefinito per la colonna, l'istruzione INSERT ha esito negativo e viene visualizzato un messaggio appropriato.

L'esempio seguente inserisce righe nella tabella Employee nel database SampleDb, dimostrando come utilizzare l'istruzione INSERT per inserire una piccola quantità di dati nel database:

USA SampleDb; INSERT INTO Employee VALUES(34990, "Andrey", "Batonov", "d1"); INSERT INTO Employee VALUES(38640, "Aleksey", "Vasin", "d3");

Ci sono due diversi modi inserendo valori in una nuova riga. L'istruzione INSERT nell'esempio seguente usa in modo esplicito parola chiave NULL e inserisce il valore NULL nella colonna corrispondente:

USA SampleDb; INSERT INTO Employee VALUES(34991, "Andrey", "Batonov", NULL);

Per inserire valori in alcune (ma non tutte) colonne di una tabella, di solito è necessario specificare esplicitamente tali colonne. Le colonne non specificate devono consentire valori NULL o devono avere un valore predefinito definito per esse.

USA SampleDb; INSERT INTO Employee(Id, FirstName, LastName) VALUES (34992, "Andrey", "Batonov");

I due esempi precedenti sono equivalenti. Nella tabella Employee, l'unica colonna che consente valori null è la colonna DepartmentNumber e per tutte le altre colonne questo valore era vietato dalla clausola NOT NULL nell'istruzione CREATE TABLE.

Ordine dei valori in frase VALORI Le istruzioni INSERT possono differire dall'ordine specificato nell'istruzione CREATE TABLE. In tal caso, il loro ordine deve corrispondere all'ordine in cui le colonne corrispondenti sono elencate nell'elenco delle colonne. Quello che segue è un esempio di inserimento dei dati in un ordine diverso dall'originale:

USA SampleDb; INSERT INTO Employee(DepartamentNumber, LastName, Id, FirstName) VALUES ("d1", "Batonov", 34993, "Andrey");

Inserimento di più righe

La seconda forma dell'istruzione INSERT inserisce una o più righe selezionate dalla sottoquery nella tabella. L'esempio seguente mostra come inserire righe in una tabella utilizzando la seconda forma dell'istruzione INSERT. In questo caso, viene eseguita una query per selezionare i numeri e i nomi dei dipartimenti situati a Mosca e caricare il set risultante in una nuova tabella creata in precedenza.

La nuova tabella MoscowDepartment creata nell'esempio sopra ha le stesse colonne di tabella esistente Reparto ad eccezione della colonna Posizione mancante. La sottoquery nell'istruzione INSERT seleziona tutte le righe della tabella Department per cui il valore della colonna Location è Mosca, che vengono quindi inserite nella nuova tabella creata all'inizio della query.

L'esempio seguente mostra un altro modo per inserire righe in una tabella utilizzando la seconda forma dell'istruzione INSERT. In questo caso, viene eseguita una query per recuperare i numeri del personale, i numeri del progetto e le date di inizio del progetto per tutti i dipendenti con la posizione "Manager" che lavorano al progetto p2, quindi caricare il set risultante in una nuova tabella creata all'inizio della domanda:

USA SampleDb; CREATE TABLE ManagerTeam(EmpId INT NOT NULL, ProjectNumber CHAR(4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam(EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate DA Works_on DOVE Job = "Manager";

Prima di inserire righe utilizzando l'istruzione INSERT, le tabelle MoscowDepartment e ManagerTeam (negli esempi precedenti) erano vuote. Se la tabella esisteva già e conteneva righe di dati, le nuove righe sarebbero state aggiunte.