1 - Introduction
Nous
avons déjà consacré quatre chapitres au langage SQL. Il nous reste à traiter
trois types de requête :
- la suppression
- la mise à jour
- l'ajout
Pour créer des exemples, nous utiliserons la table suivante,
intitulée "Table1" :
Nom Prénom
Chose Jules
Machin Pierre
Truc Patrick
Pouf Renée
Attention ! Toutes les requêtes que nous allons utiliser
modifient les tables auxquelles elles s'appliquent. Il est donc vivement
recommandé de créer une copie de la table avant d'exécuter la requête.
2 - La suppression
Rappelons
qu'une requête de suppression opère sur une table, dont elle supprime les
enregistrements (ou lignes) répondant à un ou plusieurs critères.
En SQL, c'est la commande DELETE qui permet de supprimer des
lignes dans une table. La clause WHERE permet d'exprimer les conditions
(critères) de cette suppression.
Pour supprimer la dernière ligne de la table
"Table1", nous créons la requête SQL suivante :
DELETE
Table1
WHERE
Nom="Pouf";
Mais le SGBD Access n'accepte pas cette syntaxe. Si nous
créons la requête de suppression dans l'interface graphique, sa traduction en
SQL donne :
DELETE Nom
FROM Table1
WHERE
Nom="Pouf";
Cette syntaxe fonctionne. L'enregistrement relatif à Renée
Pouf disparaît effectivement de la table "Table1" quand nous
exécutons la requête SQL ci-dessus, comme le montre la figure suivante :
Mais cette syntaxe manque de logique. Ce n'est pas dans le
seul champ "Nom" que nous opérons une suppression, c'est toute la
ligne comportant le nom "Pouf" qui disparait. C'est probablement pour
faciliter la correspondance avec l'interface graphique que l'éditeur Microsoft
a pris des libertés avec la syntaxe de la requête suppression en SQL, ce qui
est regrettable.
Tout ce que nous avons dit sur l'expression des critères
dans les requêtes de sélection s'applique aux requêtes de suppression. En
résumé, la syntaxe d'une requête de suppression est :
SQL normalisé
DELETE nom de la table
WHERE critères des suppressions;
SQL Access
DELETE nom de champ
FROM nom de table
WHERE critères des suppressions;
Attention ! dans le SGBD Access, l'opération de suppression
est irréversible.
La commande ROLLBACK, que l'on trouve dans certains SGBD, et qui annule l'effet d'une requête de mise à jour (tant qu'une commande COMMIT n'a pas rendu cet effet définitif), ne fonctionne pas ici.
Il est donc fortement recommandé de créer une sauvegarde de la table avant de la modifier.
La commande ROLLBACK, que l'on trouve dans certains SGBD, et qui annule l'effet d'une requête de mise à jour (tant qu'une commande COMMIT n'a pas rendu cet effet définitif), ne fonctionne pas ici.
Il est donc fortement recommandé de créer une sauvegarde de la table avant de la modifier.
3 - La mise à jour
Rappelons
qu'une requête de mise à jour modifie le contenu d'une colonne dans une table
donnée. Cette modification peut être soumises à des critères, de telle sorte
qu'elle ne s'applique pas à toutes les lignes.
En SQL, c'est la commande UPDATE qui permet de modifier (ou
mettre à jour) les données d'une table.
La clause SET est utilisée pour préciser la modification demandée, et la clause WHERE les conditions d'application (critères) de cette modification.
La clause SET est utilisée pour préciser la modification demandée, et la clause WHERE les conditions d'application (critères) de cette modification.
Supposons par exemple que, dans la table "Table1",
nous ayons commis une erreur en saisissant le prénom de M. Chose.
Pour remplacer "Jules" par "Henri", dans la colonne "Prénom", sur la ligne relative à M. Chose, nous utilisons la requête SQL suivante :
Pour remplacer "Jules" par "Henri", dans la colonne "Prénom", sur la ligne relative à M. Chose, nous utilisons la requête SQL suivante :
UPDATE Table1
SET Prénom = "Henri"
WHERE Nom="Chose";
L'exécution de cette requête modifie la table
"Table1" comme suit :
Attention ! dans le SGBD Access, l'opération de mise à jour
est irréversible. Il est donc fortement recommandé de créer une sauvegarde de
la table avant de la modifier.
Tout ce que nous avons dit sur l'expression des critères
dans les requêtes de sélection s'applique aux requêtes de mise à jour. La
syntaxe générale d'une requête de mise à jour est :
UPDATE nom de la table
SET nom de la colonne = nouvelle valeur
WHERE critères de la modification;
Exemple : pour augmenter de 20 % tous les prix contenus dans
la colonne "Prix" d'une table intitulée "Table2", nous
utilisons la requête ci-dessous.
On notera qu'il n'est pas nécessaire, pour évoquer le contenu du champ "Prix", de placer son nom entre crochets.
On notera qu'il n'est pas nécessaire, pour évoquer le contenu du champ "Prix", de placer son nom entre crochets.
UPDATE Table2
SET Prix = Prix*1.2;
La requête de mise à jour permet aussi d'effacer le contenu
d'une ou plusieurs cellules, par utilisation de la valeur Null.
Par exemple, la requête SQL suivante efface le prénom (Patrick) de M. Truc :
Par exemple, la requête SQL suivante efface le prénom (Patrick) de M. Truc :
UPDATE
Table1
SET Prénom
= Null
WHERE
Nom="Truc";
Remarque : si nous supprimons la clause WHERE dans la
requête précédente, et si nous l'exécutons, tous les prénoms sont effacés, et
non plus seulement celui de M. Truc.
4 - L'ajout (ou insertion)
Rappelons
qu'une requête ajout permet d'insérer (totalement ou sélectivement) une table
dans une autre.
En SQL, c'est la commande INSERT INTO qui est utilisée.
En SQL, c'est la commande INSERT INTO qui est utilisée.
Pour bâtir un exemple, nous créons la table
"Table3" avec les deux champs suivants (du type de données
"texte") :
Col1 Col2
Titi Noëlle
En SQL, l'insertion de la table "Table1" dans la
table "Table3" s'écrit :
INSERT INTO
Table3 ( Col1, Col2 )
SELECT Nom,
Prénom
FROM
Table1;
Grâce à cette syntaxe, le SGBD sait que les données du champ
"Nom" de la table "Table1" vont dans le champ
"Col1" de la table "Table3", et les données du champ
"Prénom" de la table "Table1" dans le champ
"Col2" de la table "Table3".
Il faut bien sûr que les types de données soient compatibles.
Par exemple, on peut introduire une date dans un champ texte, mais l'inverse est généralement impossible.
Il faut aussi faire attention à la façon dont on fait correspondre les champs.
Il n'est pas nécessaire qu'ils se présentent dans le même ordre dans les deux tables, pourvu que la commande SQL indique clairement comment on les met en correspondance.
Il n'est pas nécessaire non plus que les champs qui se correspondent portent le même nom.
Il faut bien sûr que les types de données soient compatibles.
Par exemple, on peut introduire une date dans un champ texte, mais l'inverse est généralement impossible.
Il faut aussi faire attention à la façon dont on fait correspondre les champs.
Il n'est pas nécessaire qu'ils se présentent dans le même ordre dans les deux tables, pourvu que la commande SQL indique clairement comment on les met en correspondance.
Il n'est pas nécessaire non plus que les champs qui se correspondent portent le même nom.
La requête précitée réalise l'opération suivante :
Si par contre on rédige la commande ainsi :
INSERT INTO
Table3 ( Col1, Col2 )
SELECT
Prénom, Nom
FROM
Table1;
ou ainsi :
INSERT INTO Table3 ( Col2, Col1)
SELECT Nom,
Prénom
FROM
Table1;
les prénoms iront dans la colonne "Col1" et les
noms dans la colonne "Col2".
On peut rajouter un ou plusieurs critères (via la clause WHERE) permettant de sélectionner les enregistrements à ajouter.
La requête ci-dessous, par exemple, ajoutera seulement Chose Henri à la table "Table3".
INSERT INTO
Table3 ( Col1, Col2 )
SELECT Nom,
Prénom
FROM Table1
WHERE
Nom<"d";
5 - Conclusion
Nous
avons appris à créer des requêtes de suppression, de mise à jour et d'ajout en
SQL. Dans le cas particulier du SGBD Access, la syntaxe de la requête de
suppression n'est pas très claire. Les requêtes de mise à jour et d'ajout ont
par contre une syntaxe qui respecte le SQL normalisé.
Certains utilisateurs pourront donc trouver utile de
basculer en mode SQL pour vérifier, avant exécution, si la requête de mise à
jour ou d'ajout qu'ils viennent de créer dans l'interface graphique répond bien
à leurs desiderata.
Aucun commentaire:
Enregistrer un commentaire