Il vous faudra donc utiliser la même requête que pour Cawette, en changeant simplement le nom (je ne vous fais pas l'affront de
vous l'écrire).
Modification avec jointure
Imaginons que vous vouliez que, pour les tortues et les perroquets, si un animal n'a pas de commentaire, on lui ajoute comme
commentaire la description de l'espèce. Vous pourriez sélectionner les descriptions, les copier, retenir l'id de l'espèce, et ensuite
faire un UPDATE pour les tortues et un autre pour les perroquets.
Ou alors, vous pourriez simplement faire un UPDATE avec jointure !
Voici la syntaxe que vous devriez utiliser pour le faire avec une jointure :
Code : SQL
UPDATE Animal
-- Classique !
INNER JOIN Espece
-- Jointure.
ON Animal.espece_id = Espece.id
-- Condition de la jointure.
SET Animal.commentaires = Espece.description
-- Ensuite, la modification voulue.
WHERE Animal.commentaires IS NULL
-- Seulement s'il n'y a pas encore de commentaire.
AND Espece.nom_courant IN ('Perroquet amazone', 'Tortue
d''Hermann');
-- Et seulement pour les perroquets et les
tortues.
Vous pouvez bien sûr mettre ce que vous voulez comme modifications. Ici, j'ai utilisé la valeur de la colonne dans l'autre
table, mais vous auriez pu mettre Animal.commentaires = 'Tralala', et la jointure n'aurait alors servi qu'à
sélectionner les tortues et les perroquets grâce au nom courant de l'espèce.
Toutes les jointures sont possibles. Vous n'êtes pas limités aux jointures internes, ni à deux tables jointes.
Suppression
Cette partie sera relativement courte, puisque l'utilisation des sous-requêtes et des jointures est assez ressemblante entre la
suppression et la modification.
Simplement, pour la suppression, les sous-requêtes et jointures ne peuvent servir qu'à sélectionner les lignes à supprimer.
Utilisation des sous-requêtes
On peut, tout simplement, utiliser une sous-requête dans la clause WHERE. Par exemple, imaginez que nous ayons deux animaux
dont le nom est "Carabistouille", un chat et un perroquet. Vous désirez supprimer Carabistouille-le-chat, mais garder
Carabistouille-le-perroquet. Vous ne pouvez donc pas utiliser la requête suivante, qui supprimera les deux :
Code : SQL
DELETE FROM Animal WHERE nom = 'Carabistouille';
Mais il suffit d'une sous-requête dans la clause WHERE pour sélectionner l'espèce, et le tour est joué !
Code : SQL
DELETE FROM Animal
WHERE nom = 'Carabistouille' AND espece_id =
(SELECT id FROM Espece WHERE nom_courant = 'Chat');
Partie 2 : Index, jointures et sous-requêtes
127/414
www.openclassrooms.com
Précédent

- 127/413

Suivant