SELECT MIN(date_naissance)
FROM (
SELECT Animal.id, Animal.sexe, Animal.date_naissance,
Animal.nom, Animal.espece_id
FROM 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;
MIN(date_naissance)
2006-03-15 14:26:00
MIN() est une fonction qui va chercher la valeur minimale dans une colonne, nous reparlerons plus en détail des
fonctions dans la troisième partie de ce cours.
Les règles à respecter
Parenthèses
Une sous-requête doit toujours se trouver dans des parenthèses, afin de définir clairement ses limites.
Alias
Dans le cas des sous-requêtes dans le FROM, il est également obligatoire de préciser un alias pour la table intermédiaire (le
résultat de notre sous-requête). Si vous ne le faites pas, MySQL déclenchera une erreur. Ici, on l'a appelée
tortues_perroquets_F.
Nommer votre table intermédiaire permet de plus de vous y référer si vous faites une jointure dessus, ou si certains noms de
colonnes sont ambigus et que le nom de la table doit être précisé. Attention au fait qu'il ne s'agit pas de la table Animal, mais
bien d'une table tirée d'Animal.
Par conséquent, si vous voulez préciser le nom de la table dans le SELECT principal, vous devez écrire SELECT
MIN(tortues_perroquets_F.date_naissance), et non pas SELECT MIN(Animal.date_naissance).
Cohérence des colonnes
Les colonnes sélectionnées dans le SELECT "principal" doivent bien sûr être présentes dans la table intermédiaire. La requête
suivante, par exemple, ne fonctionnera pas :
Code : SQL
SELECT MIN(date_naissance)
FROM (
SELECT Animal.id, Animal.nom
FROM 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;
En effet, tortues_perroquets_F n'a que deux colonnes : id et nom. Il est donc impossible de sélectionner la colonne
date_naissance de cette table.
Noms ambigus
Partie 2 : Index, jointures et sous-requêtes
114/414
www.openclassrooms.com
FROM (
SELECT Animal.id, Animal.sexe, Animal.date_naissance,
Animal.nom, Animal.espece_id
FROM 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;
MIN(date_naissance)
2006-03-15 14:26:00
MIN() est une fonction qui va chercher la valeur minimale dans une colonne, nous reparlerons plus en détail des
fonctions dans la troisième partie de ce cours.
Les règles à respecter
Parenthèses
Une sous-requête doit toujours se trouver dans des parenthèses, afin de définir clairement ses limites.
Alias
Dans le cas des sous-requêtes dans le FROM, il est également obligatoire de préciser un alias pour la table intermédiaire (le
résultat de notre sous-requête). Si vous ne le faites pas, MySQL déclenchera une erreur. Ici, on l'a appelée
tortues_perroquets_F.
Nommer votre table intermédiaire permet de plus de vous y référer si vous faites une jointure dessus, ou si certains noms de
colonnes sont ambigus et que le nom de la table doit être précisé. Attention au fait qu'il ne s'agit pas de la table Animal, mais
bien d'une table tirée d'Animal.
Par conséquent, si vous voulez préciser le nom de la table dans le SELECT principal, vous devez écrire SELECT
MIN(tortues_perroquets_F.date_naissance), et non pas SELECT MIN(Animal.date_naissance).
Cohérence des colonnes
Les colonnes sélectionnées dans le SELECT "principal" doivent bien sûr être présentes dans la table intermédiaire. La requête
suivante, par exemple, ne fonctionnera pas :
Code : SQL
SELECT MIN(date_naissance)
FROM (
SELECT Animal.id, Animal.nom
FROM 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;
En effet, tortues_perroquets_F n'a que deux colonnes : id et nom. Il est donc impossible de sélectionner la colonne
date_naissance de cette table.
Noms ambigus
Partie 2 : Index, jointures et sous-requêtes
114/414
www.openclassrooms.com
