**`INSERT`** er et SQL-uttrykk som legger til rader i en tabell i en relasjonell database. En `INSERT`-setning kan kun sette inn data i én tabell.

Syntaks
-------

`INSERT`-spørringer består av spesifikasjonene `INSERT INTO` og `VALUES`. `INSERT INTO` bestemmer hvilken tabell og hvilke kolonner verdiene skal settes inn i, og `VALUES` spesifiserer verdiene som skal settes inn.

For å sette inn verdier i alle kolonnene, benyttes en slik spørring:

```
INSERT INTO tabell
VALUES
 (
 "Verdi 1 i rad 1",
 "Verdi 2 i rad 1",
 "Verdi 3 i rad 1"
 ),
 (
 "Verdi 1 i rad 2",
 "Verdi 2 i rad 2",
 "Verdi 3 i rad 2"
 ),
 (
 "Verdi 1 i rad 3",
 "Verdi 2 i rad 3",
 "Verdi 3 i rad 3"
 )

```

For å sette inn verdier i noen av kolonnene, benyttes en slik spørring:

```
INSERT INTO tabell (
 kolonne1,
 kolonne3
)
VALUES
 (
 "Verdi 1 i rad 1",
 "Verdi 3 i rad 1"
 ),
 (
 "Verdi 1 i rad 2",
 "Verdi 3 i rad 2"
 ),
 (
 "Verdi 1 i rad 3",
 "Verdi 3 i rad 3"
 )

```

Antallet kolonner og verdier må være det samme. Hvis en kolonne ikke er spesifisert, vil en forhåndsdefinert verdi for kolonnen bli benyttet. Verdiene spesifisert av `INSERT`-utsagnet må tilfredsstille alle begrensningene for tabellen, for eksempel primærnøkler eller NOT NULL-begrensninger. Hvis en syntaksfeil oppstår, eller noen av begrensningene er brutt, vil ikke den nye raden legges til i tabellen og en feilmelding vil bli returnert.

En `INSERT`-spørring kan også brukes til å hente ut data fra andre tabeller, endre det hvis ønskelig, og sette det inn i en ny tabell. Dette kan gjøres ved hjelp av en enkelt spørring som ikke involverer noen mellomprosessering i klientapplikasjonen. En nøstet `SELECT`-spørring brukes i stedet for `VALUES`. Den nøstede spørringen kan inneholde `JOIN`, funksjonskall, og kan referere til den samme tabellen som data skal settes inn i.

```
INSERT INTO tabell2
SELECT \*
FROM tabell1
WHERE kolonne IN ("Verdi1", "Verdi2")

```

`SELECT`-uttrykket produserer en midlertidig tabell, og skjemaet til den midlertidige tabellen må være likt skjemaet i tabellen som skal motta data.

Eksempel
--------

Tabellen *telefonbok* ser slik ut:

| fornavn | etternavn | bosted | telefonnummer |
| --- | --- | --- | --- |
| Ola | Nordmann | Oslo | 01234567 |
| Navn | Navnesen | Bergen | 88765432 |

Denne spørringen blir sendt:

```
INSERT INTO telefonbok (
 fornavn,
 etternavn,
 telefonnummer
)
VALUES
 (
 "Jens",
 "Jensen",
 11223344
 ),
 (
 "Kari",
 "Nordmann",
 99887766
 )

```

Tabellen ser da slik ut:

| fornavn | etternavn | bosted | telefonnummer |
| --- | --- | --- | --- |
| Ola | Nordmann | Oslo | 01234567 |
| Navn | Navnesen | Bergen | 88765432 |
| Jens | Jensen |  | 11223344 |
| Kari | Nordmann |  | 99887766 |

| * v
* d
* r
Databaser |
| --- |
| 
* Database
* Relasjonsdatabase
* Objektdatabase
* Objektrelasjonell database
* XML
* Databasehåndteringssystem (DBMS)
* Databasemotor
* Datavarehus
* Relasjonsalgebra
* Serialiserbarhet
* Historie
* Nøkler
* Normalisering
* Tabell
* SQL
* NoSQL
* XQuery
* ODBC
* JDBC
* Perl DBI

 |
| Tema innen SQL | 
* Select
* Insert
* Update
* Delete
* Join
* Union
* Create
* Drop
* Utløser
* Visning
* Lagret prosedyre

 |
| Implementasjoner | 
* Apache Derby
* Berkeley DB
* Clipper
* Firebird
* IBM DB2
* Informix
* Ingres
* Microsoft SQL Server
* MySQL
* Oracle
* PostgreSQL
* SQLite
* Visual FoxPro

 |