Kom godt i gang med SQL

Indsæt data

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


[ Øverst på siden | Forrige side | Næste side | Indholdsfortegnelse | Stikordsregister ]