Quand une table est créée, elle ne contient aucune donnée. La première chose à faire, c'est d'y insérer des données. Sans quoi la base de données n'est pas d'une grande utilité. Les données sont conceptuellement insérées ligne par ligne. Il est évidemment possible d'insérer plus d'une ligne, mais il n'est pas possible d'entrer moins d'une ligne. Même lorsque seules les valeurs d'une partie des colonnes sont connues, une ligne complète doit être créée.
Pour créer une nouvelle ligne, la commande INSERT est utilisée. La commande a besoin du nom de la table et des valeurs de colonnes.
Soit la table des produits du Chapitre 5 :
CREATE TABLE produits ( no_produit integer, nom text, prix numeric );
Une commande d'insertion d'une ligne peut être :
INSERT INTO produits VALUES (1, 'Fromage', 9.99);
Les données sont listées dans l'ordre des colonnes de la table, séparées par des virgules. Souvent, les données sont des libellés (constantes), mais les expressions scalaires sont aussi acceptées.
La syntaxe précédente oblige à connaître l'ordre des colonnes. Pour éviter cela, les colonnes peuvent être explicitement listées. Les deux commandes suivantes ont, ainsi, le même effet que la précédente :
INSERT INTO produits (no_produit, nom, prix) VALUES (1, 'Fromage', 9.99); INSERT INTO produits (nom, prix, no_produit) VALUES ('Fromage', 9.99, 1);
Beaucoup d'utilisateurs recommandent de toujours lister les noms de colonnes.
Si les valeurs de certaines colonnes ne sont pas connues, elles peuvent être omises. Dans ce cas, elles sont remplies avec leur valeur par défaut. Par exemple :
INSERT INTO produits (no_produit, nom) VALUES (1, 'Fromage'); INSERT INTO produits VALUES (1, 'Fromage');
La seconde instruction est une extension PostgreSQL. Elle remplit les colonnes de gauche à droite avec toutes les valeurs données, et les autres prennent leur valeur par défaut.
Il est possible, pour plus de clarté, d'appeler explicitement les valeurs par défaut pour des colonnes particulières ou pour la ligne complète.
INSERT INTO produits (no_produit, nom, prix) VALUES (1, 'Fromage', DEFAULT); INSERT INTO produits DEFAULT VALUES;
Plusieurs lignes peuvent être insérées en une seule commande :
INSERT INTO produits (no_produit, nom, prix) VALUES (1, 'Fromage', 9.99), (2, 'Pain', 1.99), (3, 'Lait', 2.99);
Il est aussi possible d'insérer le résultat d'une requête (qui pourrait renvoyer aucune ligne, une ligne ou plusieurs lignes) :
INSERT INTO produits (no_produit, nom, prix) SELECT no_produit, nom, prix FROM nouveaux_produits WHERE date_sortie = 'today';
Ceci montre la grande puissance du mécanisme des requêtes SQL (Chapitre 7) sur le traitement des lignes à insérer.
Lors de l'insertion d'une grande quantité de données en même temps, il est préférable d'utiliser la commande COPY. Elle n'est pas aussi flexible que la commande INSERT, mais elle est plus efficace. Se référer à Section 14.4 pour plus d'informations sur l'amélioration des performances lors de gros chargements de données.