Maitriser le SQL chap.05

Les autres requêtes en SQL

1 - Introduction               

Nous avons déjà consacré quatre chapitres au langage SQL. Il nous reste à traiter trois types de requête :

  1. la suppression
  2. la mise à jour
  3. 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.    

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 :   


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") : 
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.              
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