|
Chapitre 21 :
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 : |
|
||||||||||
|
|
|
|
|
||||||||||
|
|
|
Pour
créer des exemples, nous utiliserons la table suivante, intitulée
"Table1" : |
|
||||||||||
|
|||||||||||||
|
|
|
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. |
|
||||||||||
|
|
|
Comme
pour les autres chapitres de ce tutoriel (ou tutorial,
ou cours en ligne), nous utiliserons le SGBD Access comme support pratique. |
|
||||||||||
|
|
|||||||||||||
|
|
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 : |
|
|||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
|
|
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 : |
|
|||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
|
|
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 : |
|
|||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
|
|
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 : |
|
|||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
|
|
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 : |
|
|||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
|
|
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. |
|
|||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
|
|
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 : |
|
|||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
|
|
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 : |
|
|||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
|
|
|
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 : |
|
|||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
|
|
|
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". |
|
|||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
|
|
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. |
|
|
|
|||