6 Singapura
2
7 Sphynx
2
Ici la sous-requête renvoie 3, donc nous avons bien les races dont l'espèce a un id inférieur à 3 (donc 1 et 2
).
Sous-requête renvoyant une ligne
Seuls les opérateurs = et != (ou <>) sont utilisables avec une sous-requête de ligne, toutes les comparaisons de type
"plus grand" ou "plus petit" ne sont pas supportées.
Dans le cas d'une sous-requête dont le résultat est une ligne, la syntaxe est la suivante :
Code : SQL
SELECT *
FROM nom_table1
WHERE [ROW](colonne1, colonne2) = (
-- le ROW n'est pas
obligatoire
SELECT colonneX, colonneY
FROM nom_table2
WHERE...);
-- Condition qui ne retourne
qu'UNE SEULE LIGNE
Cette requête va donc renvoyer toutes les lignes de la table1 dont la colonne1 = la colonneX de la ligne résultat de la sousrequête ET la colonne2 = la colonneY de la ligne résultat de la sous-requête.
Vous voulez un exemple peut-être ? Allons-y !
Code : SQL
SELECT id, sexe, nom, espece_id, race_id
FROM Animal
WHERE (id, race_id) = (
SELECT id, espece_id
FROM Race
WHERE id = 7);
id sexe
nom
espece_id race_id
7 F
Caroline 1
2
Décomposons calmement. Voyons d'abord ce que la sous-requête donne comme résultat.
Code : SQL
SELECT id, espece_id
FROM Race
WHERE id = 7;
id espece_id
7 2
Et comme condition, on a WHERE (id, race_id) = #le résultat de la sous-requête#.
Donc la requête renverra les lignes de la table Animal pour lesquelles id vaut 7 et race_id vaut 2.
Partie 2 : Index, jointures et sous-requêtes
117/414
www.openclassrooms.com
Précédent

- 117/413

Suivant