Initiation à SQL

Insertion de données

A sa création, une table ne contient aucune donnée. Pour y insérer des lignes, utilisez l'instruction INSERT. Cette instruction se présente généralement sous deux formats :

FULLSELECT fait partie des instructions de sélection utilisées dans les instructions INSERT ou CREATE VIEW, ou qui suivent un prédicat. Une instruction FULLSELECT entre parenthèses est souvent appelée sous-requête.

Selon les options par défaut que vous avez choisies lors de la création de la table, dans chaque ligne que vous insérez, soit vous fournissez une valeur pour chaque colonne, soit vous acceptez une valeur par défaut. Les valeurs par défaut des différents types de données sont décrites dans le document SQL Reference.

L'instruction suivante utilise une clause VALUES pour insérer une ligne de données dans la table PERS :

  
     INSERT INTO PERS 
     VALUES (12, 'Harris', 20, 'Sales', 5, 18000, 1000, '1950-1-1')
     

L'instruction suivante utilise la clause VALUES pour insérer trois lignes dans la table PERS, où seuls les ID, les noms et les postes sont connus. Si une colonne est de type NOT NULL sans valeur par défaut, il faut lui donner une valeur.

Dans une instruction CREATE TABLE, la clause NOT NULL d'une définition de colonne peut être suivie des mots WITH DEFAULT. Si la colonne est de type NOT NULL WITH DEFAULT, ou si une constante lui a été attribuée par défaut, comme WITH DEFAULT 10, et si vous ne la citez pas dans la liste des colonnes, la valeur par défaut s'inscrit automatiquement dans cette colonne de la ligne insérée. Par exemple, dans l'instruction CREATE TABLE, seule la colonne DEPT a été définie, et elle a une valeur égale à 10. Par conséquent, le numéro de service 10 s'inscrit dans la colonne DEPT et toute colonne à laquelle il n'a pas été explicitement attribué de valeur prend la valeur NULL.

 
     INSERT INTO PERS (NAME, JOB, ID)
        VALUES ('Swagerman', 'Prgmr', 500), 
               ('Limoges', 'Prgmr', 510), 
               ('Li', 'Prgmr', 520)

L'instruction suivante renvoie le résultat des insertions :

     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      -         -         - -         

Dans ce cas, les colonnes ne sont pas toujours alimentées. Les valeurs NULL sont signalées par un tiret (-). Il faut que la liste des noms de colonnes suive le même ordre et que les données soient du même type que dans la clause VALUES. Si la liste des noms de colonnes est absente (c'est le cas du premier exemple), la liste des valeurs citées après VALUES doit être dans le même ordre que les colonnes de la table dans laquelle elles ont été insérées et le nombre de valeurs doit être égal au nombre de colonnes de la table.

Chaque valeur doit être compatible avec le type de données attribué à la colonne dans laquelle elle est insérée. Si une colonne accepte une valeur NULL, et si aucune valeur n'est précisée, la ligne insérée prend la valeur NULL.

L'exemple suivant insère la valeur NULL dans les colonnes YEARS, COMM et BIRTH_DATE, puisque ces colonnes n'ont pas reçu de valeur spécifique pour la ligne.

     INSERT INTO PERS (ID, NAME, JOB, DEPT, SALARY)
        VALUES (410, 'Perna', 'Sales', 20, 20000)

L'autre format de l'instruction INSERT est très pratique pour alimenter une table de valeurs provenant des lignes d'une autre table. Comme nous l'avons déjà mentionné, c'est l'instruction FULLSELECT qui est utilisée au lieu de la clause VALUES. Elle identifie les colonnes de lignes contenues dans d'autres tables et/ou vues.

L'exemple suivant sélectionne, dans la table STAFF, des données sur les membres du service 38 et les insère dans la table PERS :

  
     INSERT INTO PERS (ID, NAME, DEPT, JOB, YEARS, SALARY)
        SELECT ID, NAME, DEPT, JOB, YEARS, SALARY
           FROM STAFF
           WHERE DEPT = 38

Après cette insertion, l'instruction SELECT ci-après produit un résultat identique à l'instruction FULLSELECT de l'instruction INSERT.

     SELECT ID, NAME, DEPT, JOB, YEARS, SALARY
        FROM PERS
        WHERE DEPT = 38
 

Voici le résultat obtenu :

                                                                               
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


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]