En nyoprettet tabel indeholder ingen data. Hvis du vil indsætte rækker i en tabel, skal du bruge INSERT-sætningen. Den har to generelle formater:
En fullselect er en SELECT-sætning, der bruges i INSERT- og CREATE VIEW-sætningerne samt efter et prædikat. En fullselect i parentes kaldes gerne en underforespørgsel.
Afhængigt af de standardværdier, du har valgt til tabellen, skal du for hver række, der indsættes, enten angive en værdi for hver kolonne eller acceptere standardværdien. Der er flere oplysninger om standardværdier for de forskellige datatyper i SQL Reference.
I dette eksempel bruges et VALUES-udtryk til at indsætte en datarække i tabellen PERS:
INSERT INTO PERS VALUES (12, 'Harris', 20, 'Sales', 5, 18000, 1000, '1950-1-1')
I nedenstående eksempel bruges VALUES-udtrykket til at indsætte tre rækker i tabellen PERS. Kun værdierne for id, navn og job kendes. Hvis en kolonne ikke kan indeholde NULL, og den ikke har en standardværdi, skal du angive en værdi.
Udtrykket NOT NULL i en kolonnedefinition i CREATE TABLE-sætningen kan udvides med ordene WITH DEFAULT. Hvis en kolonne er defineret som NOT NULL WITH DEFAULT eller en konstant standardværdi, som f.eks. WITH DEFAULT 10, og du ikke angiver kolonnen i listen over kolonner, bruges kolonnens standardværdi i den indsatte række. I eksemplet her er der i CREATE TABLE-sætningen kun angivet en standardværdi for kolonnen DEPT, og den er 10. Derfor indsættes afdelingsnummeret (DEPT) 10, mens alle andre kolonner, der ikke eksplicit angives en værdi for, får en NULL-værdi.
INSERT INTO PERS (NAME, JOB, ID) VALUES ('Swagerman', 'Prgmr', 500), ('Limoges', 'Prgmr', 510), ('Li', 'Prgmr', 520)
Med denne sætning får du vist resultatet af indsættelserne:
SELECT * FROM PERS ID NAME DEPT JOB YEARS SALARY COMM BIRTH_DATE ------ --------- ------ ----- ------ --------- --------- ---------- 12 Harris 20 Sales 5 18000.00 1000.00 01/01/1950 500 Swagerman 10 Prgmr - - - - 510 Limoges 10 Prgmr - - - - 520 Li 10 Prgmr - - - -
I dette tilfælde vises der ikke værdier for alle kolonner. NULL-værdier angives ved en tankestreg (-). Hvis det skal kunne lade sig gøre, skal listen over kolonnenavne svare nøjagtigt til værdierne i VALUES-udtrykket både mht. rækkefølge og datatype. Hvis kolonnenavnene udelades (som i det første eksempel), skal værdierne efter VALUES stå i samme rækkefølge som kolonnerne i den tabel, de skal indsættes i, og antallet af værdier skal være lig med antallet af kolonner i tabellen.
Alle værdier skal være kompatible med datatyperne i de kolonner, de indsættes i. Hvis en kolonne kan indeholde NULL, og der ikke angives nogen værdi for kolonne, bruges NULL-værdien i den kolonne i den indsatte række.
I nedenstående eksempel indsættes NULL-værdier i YEARS, COMM og BIRTH_DATE, da der ikke er angivet værdier for disse kolonner.
INSERT INTO PERS (ID, NAME, JOB, DEPT, SALARY) VALUES (410, 'Perna', 'Sales', 20, 20000)
Det andet format til INSERT-sætningen er praktisk, hvis værdier fra rækker i andre tabeller skal indsættes i en tabel. Som sagt skal du ikke angive værdier, men bruge en fullselect til at identificere kolonner fra rækker i andre tabeller og/eller udpluk.
I dette eksempel hentes data om medarbejdere i afdeling 38 fra tabellen STAFF og indsættes i tabellen PERS:
INSERT INTO PERS (ID, NAME, DEPT, JOB, YEARS, SALARY) SELECT ID, NAME, DEPT, JOB, YEARS, SALARY FROM STAFF WHERE DEPT = 38
Når disse data er indsat, giver følgende SELECT-sætning samme resultat som fullselecten i INSERT-sætningen.
SELECT ID, NAME, DEPT, JOB, YEARS, SALARY FROM PERS WHERE DEPT = 38
Resultatet er:
ID NAME DEPT JOB YEARS SALARY ------ --------- ------ ----- ------ --------- 30 Marenghi 38 Mgr 5 17506.75 40 O'Brien 38 Sales 6 18006.00 60 Quigley 38 Sales - 16808.30 120 Naughton 38 Clerk - 12954.75 180 Abrahams 38 Clerk 3 12009.75