Pour finir, attention aux noms de colonnes ambigus. Une table, même intermédiaire, ne peut pas avoir deux colonnes ayant le
même nom. Si deux colonnes ont le même nom, il est nécessaire de renommer explicitement au moins l'une des deux.
Donc, si on veut sélectionner la colonne Espece.id en plus dans la sous-requête, on peut procéder ainsi :
Code : SQL
SELECT MIN(date_naissance)
FROM (
SELECT Animal.id, Animal.sexe, Animal.date_naissance,
Animal.nom, Animal.espece_id,
Espece.id AS espece_espece_id
-- On renomme la
colonne id de Espece, donc il n'y a plus de doublons.
FROM Animal
-- Attention de ne
pas la renommer espece_id, puisqu'on sélectionne aussi la colonne
espece_id dans Animal !
INNER JOIN Espece
ON Espece.id = Animal.espece_id
WHERE sexe = 'F'
AND Espece.nom_courant IN ('Tortue d''Hermann', 'Perroquet
amazone')
) AS tortues_perroquets_F;
Sous-requêtes dans les conditions
Je vous ai donc dit que lorsque vous faites une requête SELECT, le résultat est sous forme de table. Ces tables de résultats
peuvent avoir :
plusieurs colonnes et plusieurs lignes ;
plusieurs colonnes mais une seule ligne ;
plusieurs lignes mais une seule colonne ;
ou encore une seule ligne et une seule colonne (c'est-à-dire juste une valeur).
Les sous-requêtes renvoyant plusieurs lignes et plusieurs colonnes ne sont utilisées que dans les clauses FROM. Nous allons ici
nous intéresser aux trois autres possibilités uniquement.
Comparaisons
Pour rappel, voici un tableau des opérateurs de comparaison.
Opérateur
Signification
=
égal
<
inférieur
<=
inférieur ou égal
>
supérieur
>=
supérieur ou égal
<> ou !=
différent
<=>
égal (valable pour NULL aussi)
On peut utiliser des comparaisons de ce type avec des sous-requêtes qui donnent comme résultat soit une valeur (c'est-à-dire
une seule ligne et une seule colonne), soit une ligne (plusieurs colonnes mais une seule ligne).
Sous-requête renvoyant une valeur
Le cas le plus simple est évidemment d'utiliser une sous-requête qui renvoie une valeur.
Code : SQL
Partie 2 : Index, jointures et sous-requêtes
115/414
www.openclassrooms.com
Précédent

- 115/413

Suivant