|
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 : |
|
| Nom |
Prénom |
| Chose |
Jules |
| Machin |
Pierre |
| Truc |
Patrick |
| Pouf |
Renée |
|
-- Suppression --> |
| Nom |
Prénom |
| Chose |
Jules |
| Machin |
Pierre |
| Truc |
Patrick |
|
|
| Table initiale |
|
Table modifiée |
|
|
|
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. |
|
|
|
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. |
|
|
|
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 : |
|
UPDATE Table1 SET Prénom = "Henri" WHERE Nom="Chose"; |
|
|
|
L'exécution de cette requête modifie la table "Table1" comme suit : |
|
| Nom |
Prénom |
| Chose |
Jules |
| Machin |
Pierre |
| Truc |
Patrick |
|
-- Mise à jour --> |
| Nom |
Prénom |
| Chose |
Henri |
| Machin |
Pierre |
| Truc |
Patrick |
|
|
| Table initiale |
|
Table modifiée |
|
|
|
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. |
|
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 : |
|
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. |
|
|
|
Pour bâtir un exemple, nous créons la table "Table3" avec les deux champs suivants (du type de données
"texte") : |
|
|
|
|
|
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. |
|
|
|
La requête précitée réalise l'opération suivante : |
|
| Nom |
Prénom |
| Chose |
Henri |
| Machin |
Pierre |
| Truc |
Patrick |
|
+ |
|
= |
| Col1 |
Col2 |
| Titi |
Noëlle |
| Chose |
Henri |
| Machin |
Pierre |
| Truc |
Patrick |
|
|
| Table ajoutée |
Table réceptrice |
Résultat |
|
|
|
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"; |
|
|