Maison / Tutoriels Windows / Transact-SQL - insertion de données. Requête SQL INSERT INTO - remplir la base de données avec des informations Insérer dans la syntaxe

Transact-SQL - insertion de données. Requête SQL INSERT INTO - remplir la base de données avec des informations Insérer dans la syntaxe

Dans les sections précédentes, nous avons considéré le travail d'obtention de données à partir de tables pré-créées. Il est maintenant temps de comprendre comment nous pouvons créer/supprimer des tables, ajouter de nouveaux enregistrements et supprimer les anciens. A ces fins dans SQL il y a des opérateurs comme : CRÉER- crée un tableau MODIFIER- modifie la structure du tableau, GOUTTE- supprime une table ou un champ, INSÉRER- ajoute des données à la table. Commençons notre connaissance avec ce groupe d'opérateurs de l'opérateur INSÉRER.

1. Ajouter des lignes entières

Comme son nom l'indique, l'opérateur INSÉRER utilisé pour insérer (ajouter) des lignes à une table de base de données. L'ajout peut se faire de plusieurs manières :

  • - ajouter une ligne complète
  • - ajouter une partie d'une chaîne
  • - ajouter des résultats de requête.

Alors pour ajouter nouvelle ligneà la table, nous devons spécifier le nom de la table, répertorier les noms de colonne et spécifier la valeur de chaque colonne à l'aide de la construction INSÉRER DANS nom_table (champ1, champ2 ...) VALEURS (valeur1, valeur2 ...). Prenons un exemple.

INSERT INTO Vendeurs (identifiant, adresse, ville, nom_du_vendeur, pays) VALUES("6", "1ère rue", "Los Angeles", "Harry Monroe", "États-Unis")

Vous pouvez également modifier l'ordre des noms de colonnes, mais en même temps, vous devez modifier l'ordre des valeurs dans le paramètre VALEURS.

2. Ajout d'une partie des lignes

Dans l'exemple précédent, lors de l'utilisation de l'opérateur INSÉRER nous avons explicitement marqué les noms des colonnes de la table. En utilisant cette syntaxe, nous pouvons ignorer certaines colonnes. Cela signifie que vous entrez une valeur pour certaines colonnes mais que vous ne fournissez pas de valeurs pour d'autres. Par exemple:

INSERT INTO Sellers (ID, City, Seller_name) VALUES("6", "Los Angeles", "Harry Monroe")

DANS cet exemple nous n'avons pas spécifié de valeur pour deux colonnes adresse Et Pays. Vous pouvez exclure certaines colonnes de la déclaration INSÉRER DANS, s'il permet la définition de la table. Dans ce cas, une des conditions suivantes doit être remplie : cette colonne est définie comme autorisant la valeur NUL(l'absence de toute valeur) ou dans la définition de table la valeur par défaut spécifiée. Cela signifie que si aucune valeur n'est spécifiée, la valeur par défaut sera utilisée. Si vous ignorez une colonne dans un tableau qui n'autorise pas les valeurs dans ses lignes NUL et n'a pas de valeur par défaut définie, le SGBD émettra un message d'erreur et cette ligne ne sera pas ajoutée.

3. Ajout des données sélectionnées

Dans les exemples précédents, nous avons inséré des données dans des tables en les écrivant manuellement dans la requête. Cependant, l'opérateur INSÉRER DANS nous permet d'automatiser ce processus si nous voulons insérer des données d'une autre table. Pour ce faire, SQL a une structure comme celle-ci : INSÉRER DANS ... SÉLECTIONNER .... Cette conception vous permet de sélectionner simultanément des données d'une table et de les insérer dans une autre. Supposons que nous ayons une autre table Vendeurs_UE avec une liste de vendeurs de nos marchandises en Europe et nous devons les ajouter au tableau général Les vendeurs. La structure de ces tables est la même (même nombre de colonnes et mêmes noms), mais des données différentes. Pour cela, nous pouvons écrire la requête suivante :

INSERT INTO Vendeurs (identifiant, adresse, ville, nom_du_vendeur, pays) SELECTID, adresse, ville, nom_du_vendeur, pays FROM Sellers_EU

Vous devez faire attention à ce que la valeur des clés internes ne soit pas répétée (champ IDENTIFIANT), sinon une erreur se produira. Opérateur SÉLECTIONNER peut également inclure des suggestions pour filtrer les données. Il convient également de noter que le SGBD ne fait pas attention aux noms des colonnes contenues dans l'instruction SÉLECTIONNER, seul l'ordre de leur disposition est important pour elle. Par conséquent, les données de la première colonne spécifiée qui a été sélectionnée en raison de SÉLECTIONNER, sera de toute façon rempli dans la première colonne du tableau Les vendeurs spécifié après l'opérateur INSÉRER DANS, quel que soit le nom du champ.

4. Copier des données d'une table à une autre

Souvent, lorsque vous travaillez avec des bases de données, il devient nécessaire de créer des copies de toutes les tables à des fins de sauvegarde ou de modification. Pour faire une copie complète d'une table en SQL, une instruction distincte est fournie SÉLECTIONNER DANS. Par exemple, nous devons créer une copie de la table Les vendeurs, vous devrez rédiger la demande comme suit :

SELECT * INTO Sellers_new FROM Vendeurs

Contrairement à la conception précédente INSÉRER DANS ... SÉLECTIONNER ... lorsque des données sont ajoutées à une table existante, la construction copie les données dans la nouvelle table. On peut également dire que le premier construit importe des données, tandis que le second construit les exporte. Lors de l'utilisation de la structure SÉLECTIONNER ... DANS ... DE ... les éléments suivants doivent être pris en compte :

  • - vous pouvez utiliser n'importe quelle phrase dans l'opérateur SÉLECTIONNER, tel que PAR GROUPE Et AYANT
  • - la jointure peut être utilisée pour ajouter des données à partir de plusieurs tables
  • - les données ne peuvent être ajoutées qu'à une seule table, quel que soit le nombre de tables dont elles proviennent.

En utilisant SQL, vous pouvez copier des informations d'une table à une autre.

L'instruction INSERT INTO SELECT copie les données d'une table et les insère dans une table existante.

Instruction SQL INSERT INTO SELECT,

L'instruction INSERT INTO SELECT sélectionne les données d'une table et les insère dans une table existante. Les lignes existantes dans la table cible ne sont pas modifiées.

SQL INSERT INTO SELECT, Syntaxe

Nous pouvons copier toutes les colonnes d'une table vers une autre table existante :

INSÉRER DANS Tableau 2
CHOISIR * DE Tableau 1;

Ou nous ne pouvons copier que les colonnes que nous voulons dans une autre table existante :

INSÉRER DANS Tableau 2
(nom(s) de colonne)
SÉLECTIONNER nom(s) de colonne(s)
DEPUIS Tableau 1;

Base de données de démonstration

Dans ce didacticiel, nous utiliserons la célèbre base de données Northwind.

Voici une sélection du tableau "Clients":

ID de l'utilisateurNom du clientLa personne de contactAdressevilleCode postalUn pays
1 Alfred Futterkiste Marie Anders Obere Str. 57 Berlin 12209 Allemagne
2 Ana Trujillo Emparedados et helados Ana Trujillo Avda. de la Constitution 2222 Mexique D.F. 05021 Mexique
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 Mexique D.F. 05023 Mexique

Et une sélection du tableau "Fournisseurs":

SQL INSERT INTO SELECT, Exemples

Copier quelques colonnes de "Fournisseurs" dans "Clients" :

Copiez uniquement les fournisseurs allemands dans "Clients" .

Qu'est-ce que INSÉRER DANS ?

L'objectif principal des systèmes de base de données est de stocker des données dans les tables. Les données sont généralement fournies par des programmes d'application qui s'exécutent au-dessus de la base de données. À cette fin, SQL a la commande INSERT qui est utilisée pour stocker des données dans une table. Le La commande INSERT crée une nouvelle ligne dans la table pour stocker les données.

Syntaxe de base

Examinons la syntaxe de base de la commande SQL INSERT présentée ci-dessous.

INSERT INTO `table_name`(column_1,column_2,...) VALUES (value_1,value_2,...);

  • INSÉRER DANS `nom_table` est la commande qui indique au serveur MySQL d'ajouter une nouvelle ligne dans une table nommée `table_name`.
  • (colonne_1, colonne_2,...) spécifie les colonnes à mettre à jour dans la nouvelle ligne
  • VALEURS (valeur_1,valeur_2,...) spécifie les valeurs à ajouter dans la nouvelle ligne

Lors de la fourniture des valeurs de données à insérer dans la nouvelle table, les éléments suivants doivent être pris en compte lors du traitement des différents types de données.

  • Types de données de chaîne- toutes les valeurs de chaîne doivent être placées entre guillemets simples.
  • Types de données numériques- toutes les valeurs numériques doivent être fournies directement sans les enfermer dans des guillemets simples ou doubles.
  • Types de données de date- mettez les valeurs de date entre guillemets simples au format "AAAA-MM-JJ".

Exemple:

Supposons que nous ayons la liste suivante de nouveaux membres de bibliothèque qui doivent être ajoutés à la base de données.

Noms complets Date de naissance genre adresse physique adresse postale numéro de contact Adresse e-mail
Léonard Hofstadter Homme Crête des bois 0845738767
Sheldon Cooper Homme Crête des bois 0976736763
Rajesh Koothrappali Homme fairview 0938867763
Leslie Winkel 14/02/1984 Homme 0987636553
Howard Wolowitz 24/08/1981 Homme Parc du Sud P.O. Case postale 4563 0987786553

Insérons les données une par une. Nous commencerons par Leonard Hofstadter. Nous traiterons le numéro de contact comme un type de données numérique et ne mettrons pas le numéro entre guillemets simples.

INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) VALUES ("Leonard Hofstadter","Homme","Woodcrest",0845738767);

L'exécution du script ci-dessus supprime le 0 du numéro de contact de Leonard, car la valeur sera traitée comme une valeur numérique et le zéro (0) au début est supprimé car il n'est pas significatif.

Afin d'éviter de tels problèmes, la valeur doit être entourée de guillemets simples comme indiqué ci-dessous -

INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) VALUES ("Sheldon Cooper","Homme","Woodcrest", "0976736763");

Dans le cas ci-dessus, zéro (0) ne sera pas supprimé

La modification de l'ordre des colonnes n'a aucun effet sur la requête INSERT tant que les bonnes valeurs ont été mappées sur les bonnes colonnes.

La requête ci-dessous illustre le point ci-dessus.

INSERT INTO `members` (`contact_number`,`gender`,`full_names`,`physical_address`)VALUES ("0938867763","Homme","Rajesh Koothrappali","Woodcrest");

Les requêtes ci-dessus ont ignoré la colonne de la date de naissance, par défaut, MySQL insérera des valeurs NULL dans les colonnes qui sont ignorées dans la requête INSERT.

Insérons maintenant l'enregistrement de Leslie dont la date de naissance est fournie. La valeur de date doit être entourée de guillemets simples au format "AAAA-MM-JJ".

INSERT INTO `members` (`full_names`,`date_of_birth`,`sexe`,`physical_address`,`contact_number`) VALUES ("Leslie Winkle","1984-02-14","Homme","Woodcrest", "0987636553");

Toutes les requêtes ci-dessus ont spécifié les colonnes et les ont mappées aux valeurs de l'instruction d'insertion. Si nous fournissons des valeurs pour TOUTES les colonnes de la table, nous pouvons omettre les colonnes de la requête d'insertion.

INSERT INTO `members` VALUES (9,"Howard Wolowitz","Male","1981-08-24","SouthPark","P.O. Box 4563", "0987786553", "lwolowitzemail.me");

Utilisons maintenant l'instruction SELECT pour afficher toutes les lignes de la table des membres. SELECT * FROM `members`;

numéro de membrenoms completsgenredate de naissanceadresse physiqueadresse postalecontact_numbere-mail
1 Janet JonesFemme21-07-1980 Terrain de la première rue n ° 4Sac privé0759 253 542 Cette adresse e-mail est protégée du spam. Vous devez activer Javascript pour le voir.
2 Janet SmithJonesFemme23-06-1980 Melrose 123NULNULCette adresse e-mail est protégée du spam. Vous devez activer Javascript pour le voir.
3 Robert PhilHomme12-07-1989 3e rue 34NUL12345 Cette adresse e-mail est protégée du spam. Vous devez activer Javascript pour le voir.
4 Gloria WilliamsFemme14-02-1984 2e rue 23NULNULNUL
5 Léonard HofstadterHommeNULCrête des boisNUL845738767 NUL
6 Sheldon CooperHommeNULCrête des boisNUL976736763 NUL
7 Rajesh KoothrappaliHommeNULCrête des boisNUL938867763 NUL
8 Leslie WinkelHomme14-02-1984 Crête des boisNUL987636553 NUL
9 Howard WolowitzHomme24-08-1981 Parc du SudP.O. Case postale 4563987786553 Cette adresse e-mail est protégée du spam. Vous devez activer Javascript pour le voir.

Notez que le numéro de contact de Leonard Hofstadter a supprimé le zéro (0) du numéro de contact. Les autres numéros de contact n'ont pas laissé tomber le zéro (0) au début.

Insertion dans une table à partir d'une autre table

La commande INSERT peut également être utilisée pour insérer des données dans une table à partir d'une autre table. La syntaxe de base est comme indiqué ci-dessous.

INSERT INTO table_1 SELECT * FROM table_2;

Regardons maintenant un exemple pratique, nous allons créer une table factice pour les catégories de films à des fins de démonstration. Nous appellerons la nouvelle table de catégories categories_archive. Le script ci-dessous crée la table.

CREATE TABLE `categories_archive` (`category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`))

Exécutez le script ci-dessus pour créer la table.

Insérons maintenant toutes les lignes de la table des catégories dans la table d'archive des catégories. Le script ci-dessous nous aide à y parvenir.

INSERT INTO `categories_archive` SELECT * FROM `categories` ;

L'exécution du script ci-dessus insère toutes les lignes de la table des catégories dans la table d'archive des catégories. Notez que les structures de table devront être les mêmes pour que le script fonctionne. Un script plus robuste est celui qui associe les noms de colonne de la table d'insertion à ceux de la table contenant les données.

La requête ci-dessous illustre son utilisation.

INSERT INTO `categories_archive`(category_id,category_name,remarks) SELECT category_id,category_name,remarks FROM `categories` ;

Exécution de la requête SELECT

SELECT * FROM `categories_archive`

donne les résultats suivants présentés ci-dessous.

id_catégorieNom de catégorieremarques
1 ComédieFilms avec humour
2 Romantiquehistoires d'amour
3 épiquehistoire films anciens
4 HorreurNUL
5 la science-fictionNUL
6 PolarNUL
7 actionNUL
8 comédie romantiqueNUL
9 Les dessins animésNUL
10 Les dessins animésNUL

Résumé

  • La commande INSERT est utilisée pour ajouter de nouvelles données dans une table
  • Les valeurs de date et de chaîne doivent être placées entre guillemets simples.
  • Les valeurs numériques n'ont pas besoin d'être placées entre guillemets.
  • La commande INSERT peut également être utilisée pour insérer des données d'une table dans une autre.

L'instruction INSERT insère de nouveaux enregistrements dans une table. Dans ce cas, les valeurs des colonnes peuvent être des constantes littérales ou être le résultat d'une sous-requête. Dans le premier cas, une instruction INSERT distincte est utilisée pour insérer chaque ligne ; dans le second cas, autant de lignes que celles renvoyées par la sous-requête seront insérées.

La syntaxe de l'opérateur est la suivante :

    INSÉRER DANS[(,...)]

    (VALEURS(,…) )

  1. | ( LES VALEURS PAR DÉFAUT )

Comme vous pouvez le voir dans la syntaxe présentée, la liste des colonnes est facultative (les crochets dans la description de la syntaxe l'indiquent). S'il est absent, la liste des valeurs insérées doit être complète, c'est-à-dire fournir des valeurs pour toutes les colonnes du tableau. L'ordre des valeurs doit correspondre à l'ordre spécifié par l'instruction CREATE TABLE pour la table dans laquelle les lignes sont insérées. De plus, ces valeurs doivent être du même type de données que les colonnes dans lesquelles elles sont saisies. Par exemple, envisagez d'insérer une ligne dans la table Product créée par l'instruction CREATE TABLE suivante :

    CRÉER TABLE produit

    maker char (1 ) NOT NULL ,

    modèle varchar(4) NOT NULL ,

    tapez varchar(7) NON NULL

Supposons qu'il soit demandé d'ajouter à ce tableau le modèle de PC 1157 du fabricant B. Cela peut être fait par la déclaration suivante :

    INSÉRER DANS Produit

    VALEURS ("B" , 1157 , "PC" ) ;

Si vous spécifiez une liste de colonnes, vous pouvez modifier l'ordre "naturel" de leur séquence :

    INSERT INTO Produit (type, modèle, fabricant)

    VALEURS ("PC" , 1157 , "B" ) ;

Il semblerait que ce soit une fonctionnalité complètement inutile, ce qui ne fait que rendre la conception plus lourde. Cependant, il gagne si les colonnes ont des valeurs par défaut. Considérez la structure de table suivante :

    CRÉER TABLE produit_D

    fabricant char (1 ) NULL ,

    modèle varchar(4) NULL ,

    type varchar (7) NOT NULL DEFAULT "PC"

Notez qu'ici les valeurs de toutes les colonnes ont des valeurs par défaut (les deux premières sont NULL et la dernière colonne est de type - PC). Maintenant on pourrait écrire :

    INSERT INTO Product_D(modèle, fabricant)

    VALEURS(1157 , "B" ) ;

Dans ce cas, la valeur manquante sera remplacée par la valeur par défaut, PC, lors de l'insertion d'une ligne. Notez que si aucune valeur par défaut n'est spécifiée pour une colonne dans une instruction CREATE TABLE et qu'aucune contrainte NOT NULL n'est spécifiée qui interdit l'utilisation de NULL dans cette colonne de table, alors la valeur par défaut de NULL est implicite.

La question se pose : est-il possible de ne pas spécifier de liste de colonnes et, néanmoins, d'utiliser les valeurs par défaut ? La réponse est positive. Pour ce faire, au lieu de spécifier explicitement une valeur, utilisez le mot réservé DEFAULT :

    INSÉRER DANS Produit_D

    VALEURS ("B" , 1158 , PAR DÉFAUT ) ;

Puisque toutes les colonnes ont des valeurs par défaut, pour insérer une ligne avec des valeurs par défaut on pourrait écrire :

    INSÉRER DANS Produit_D

    VALEURS (PAR DEFAUT , PAR DEFAUT , PAR DEFAUT ) ;

Cependant, il existe une construction spéciale DEFAULT VALUES pour ce cas (voir la syntaxe de l'opérateur), qui peut être utilisée pour réécrire l'opérateur ci-dessus comme

    INSERT INTO Product_D VALEURS PAR DÉFAUT ;

Notez que lors de l'insertion d'une ligne dans un tableau, toutes les restrictions imposées à cette table. Il peut s'agir de contraintes de clé primaire ou index unique, contraintes de vérification de type CHECK , contraintes d'intégrité référentielle. Si une restriction est violée, l'insertion de la ligne sera rejetée. Considérons maintenant le cas de l'utilisation d'une sous-requête. Supposons que nous voulions insérer dans la table Product_D toutes les lignes de la table Product liées aux modèles Ordinateur personnel(type='PC'). Étant donné que les valeurs dont nous avons besoin se trouvent déjà dans une table, la formation manuelle de lignes insérées, d'une part, est inefficace et, d'autre part, elle peut permettre des erreurs de saisie. L'utilisation d'une sous-requête résout ces problèmes :

L'utilisation du symbole "*" dans la sous-requête est justifiée dans ce cas, puisque l'ordre des colonnes est le même pour les deux tables. Si ce n'était pas le cas, une liste de colonnes devrait être appliquée soit dans l'instruction INSERT, soit dans la sous-requête, soit les deux, ce qui correspondrait à l'ordre des colonnes :

Ici, comme précédemment, vous pouvez ne pas spécifier toutes les colonnes si vous souhaitez utiliser les valeurs par défaut existantes, par exemple :

Dans ce cas, la colonne type de la table Product_D sera définie sur la valeur par défaut PC pour toutes les lignes insérées.

Notez que lors de l'utilisation d'une sous-requête contenant un prédicat, seules seront insérées les lignes pour lesquelles la valeur du prédicat est TRUE (pas UNKNOWN !). En d'autres termes, si la colonne de type dans la table Product acceptait les valeurs NULL et que cette valeur était présente dans un certain nombre de lignes, ces lignes ne seraient pas insérées dans la table Product_D.

Pour surmonter la limitation de l'insertion d'une seule ligne dans une instruction INSERT lors de l'utilisation d'un constructeur de ligne dans une clause VALUES, une astuce artificielle consiste à utiliser une sous-requête qui forme une ligne avec une clause UNION ALL. Donc, si nous devons insérer plusieurs lignes avec une seule instruction INSERT, nous pouvons écrire :

    INSÉRER DANS Produit_D

    SELECT "B" AS maker, modèle 1158 AS, type "PC" AS

    UNION TOUS

    SÉLECTIONNEZ "C", 2190, "Ordinateur portable"

    UNION TOUS

    SELECT "D" , 3219 , "Imprimante" ;

Utiliser UNION ALL est préférable à UNION même s'il est garanti qu'il n'y aura pas de lignes en double, car dans ce cas il n'y aura pas de contrôle des doublons.

Il convient de noter que l'insertion de plusieurs tuples à l'aide du constructeur de chaîne est déjà implémentée dans Système de gestion de base de données relationnelle (SGBD) développé par Microsoft Corporation.Le langage de requête structuré est un langage informatique à usage général utilisé pour créer, modifier et manipuler des données dans des bases de données relationnelles. serveur SQL 2008. Compte tenu de cette possibilité, la dernière requête peut être réécrite comme suit :

    INSÉRER DANS LES VALEURS Product_D

    ("B" , 1158 , "PC" ) ,

    ("C" , 2190 , "Ordinateur portable" ) ,

Outre l'instruction SELECT décrite précédemment, le langage de manipulation de données (DML) contient trois autres instructions : INSERT, UPDATE et DELETE. Comme l'instruction SELECT, ces trois instructions fonctionnent sur des tables ou des vues. Cet article traite de l'instruction INSERT et les deux autres instructions sont abordées dans l'article suivant.

INSÉRER l'instruction insère des lignes (ou des parties de lignes) dans un tableau. Il y en a deux différentes formes cette consigne :

INSERT tab_name [(col_list)] VALEURS PAR DÉFAUT | VALUES (( DEFAULT | NULL | expression ) [ ,...n]) INSERT INTO nom_onglet | view_name [(col_list)] (select_statement | execute_statement) Conventions de syntaxe

La première forme de l'instruction vous permet d'insérer une ligne (ou une partie de celle-ci) dans le tableau. Et la deuxième forme de l'instruction INSERT vous permet d'insérer dans la table le jeu de résultats d'une instruction SELECT ou d'une procédure stockée exécutée par une instruction EXECUTE. La procédure stockée doit renvoyer des données à insérer dans la table. Lorsqu'elle est utilisée avec une instruction INSERT, l'instruction SELECT peut sélectionner des valeurs d'une table différente ou de la même table dans laquelle les données sont insérées, tant que les types de données des colonnes correspondantes sont compatibles.

Pour les deux formulaires, le type de données de chaque valeur insérée doit être compatible avec le type de données de la colonne de table correspondante. Toutes les données de chaîne et temporaires doivent être placées entre guillemets ; Les valeurs numériques n'ont pas besoin d'être placées entre guillemets.

Insertion d'une seule ligne

Pour les deux formes de l'instruction INSERT, une liste explicite de colonnes est facultative. L'absence de liste de colonnes revient à spécifier toutes les colonnes de la table.

Paramètre VALEURS PAR DÉFAUT insère des valeurs par défaut pour toutes les colonnes. Les colonnes avec le type de données TIMESTAMP ou la propriété IDENTITY sont insérées par défaut avec des valeurs générées automatiquement par le système. Pour les colonnes d'autres types de données, la valeur par défaut non nulle correspondante est insérée, le cas échéant, ou NULL dans le cas contraire. Si les valeurs nulles ne sont pas autorisées pour une colonne et qu'aucune valeur par défaut n'est définie pour la colonne, l'instruction INSERT échoue et un message approprié s'affiche.

L'exemple suivant insère des lignes dans la table Employee de la base de données SampleDb, montrant comment utiliser l'instruction INSERT pour insérer une petite quantité de données dans la base de données :

UTILISER SampleDb ; INSERT INTO Employee VALUES(34990, "Andrey", "Batonov", "d1"); INSERT INTO Employee VALUES(38640, "Aleksey", "Vasin", "d3");

Il y en a deux différentes façons insérer des valeurs dans une nouvelle ligne. L'instruction INSERT dans l'exemple ci-dessous utilise explicitement mot-clé NULL et insère la valeur NULL dans la colonne correspondante :

UTILISER SampleDb ; INSERT INTO Employee VALUES(34991, "Andrey", "Batonov", NULL);

Pour insérer des valeurs dans certaines colonnes (mais pas toutes) d'une table, vous devez généralement spécifier explicitement ces colonnes. Les colonnes non spécifiées doivent soit autoriser les valeurs NULL, soit avoir une valeur par défaut définie pour elles.

UTILISER SampleDb ; INSERT INTO Employee(Id, FirstName, LastName) VALUES (34992, "Andrey", "Batonov");

Les deux exemples précédents sont équivalents. Dans la table Employee, la seule colonne qui autorise les valeurs nulles est la colonne DepartmentNumber, et pour toutes les autres colonnes, cette valeur était interdite par la clause NOT NULL dans l'instruction CREATE TABLE.

Ordre des valeurs dans phrase VALEURS Les instructions INSERT peuvent différer de l'ordre spécifié dans l'instruction CREATE TABLE. Dans ce cas, leur ordre doit correspondre à l'ordre dans lequel les colonnes correspondantes sont répertoriées dans la liste des colonnes. Voici un exemple d'insertion de données dans un ordre différent de l'original :

UTILISER SampleDb ; INSERT INTO Employee(DepartamentNumber, LastName, Id, FirstName) VALUES ("d1", "Batonov", 34993, "Andrey");

Insertion de plusieurs lignes

La deuxième forme de l'instruction INSERT insère une ou plusieurs lignes sélectionnées par la sous-requête dans la table. L'exemple ci-dessous montre comment insérer des lignes dans une table à l'aide de la deuxième forme de l'instruction INSERT. Dans ce cas, une requête est effectuée pour sélectionner les numéros et les noms des départements situés à Moscou, et charger l'ensemble résultant dans une nouvelle table créée précédemment.

La nouvelle table MoscowDepartment créée dans l'exemple ci-dessus a les mêmes colonnes que tableau existant Département à l'exception de la colonne Emplacement manquante. La sous-requête de l'instruction INSERT sélectionne toutes les lignes de la table Department pour lesquelles la valeur de la colonne Location est Moscow, qui sont ensuite insérées dans la nouvelle table créée au début de la requête.

L'exemple ci-dessous montre une autre façon d'insérer des lignes dans une table à l'aide de la deuxième forme de l'instruction INSERT. Dans ce cas, une requête est exécutée pour récupérer les numéros de personnel, les numéros de projet et les dates de début de projet pour tous les employés ayant le poste "Manager" qui travaillent sur le projet p2, puis charge l'ensemble résultant dans une nouvelle table créée au début de la requête :

UTILISER SampleDb ; CREATE TABLE ManagerTeam(EmpId INT NOT NULL, ProjectNumber CHAR(4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam(EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = "Manager" ;

Avant d'insérer des lignes à l'aide de l'instruction INSERT, les tables MoscowDepartment et ManagerTeam (dans les exemples ci-dessus) étaient vides. Si la table existait déjà et contenait des lignes de données, de nouvelles lignes y seraient ajoutées.