3 Boxer
Race
Exception pour les tris sur les requêtes intermédiaires
Je vous ai dit qu'il n'était pas possible de trier les résultats d'une requête intermédiaire. En réalité, c'est plus subtil que ça.
Dans une requête intermédiaire, il est possible d'utiliser un ORDER BY mais uniquement combiné à un LIMIT. Cela permettra de
restreindre les résultats voulus (les X premiers dans l'ordre défini par l'ORDER BY par exemple).
Prenons la requête suivante :
Code : SQL
(SELECT id, nom, 'Race' AS table_origine FROM Race LIMIT 6)
UNION
(SELECT id, nom_latin, 'Espèce' AS table_origine FROM Espece LIMIT
3);
Cela vous renvoie bien 6 races et 3 espèces, mais imaginons que vous ne vouliez pas n'importe quelles races, mais les 6 dernières
par ordre alphabétique du nom. Dans ce cas-là, vous pouvez utiliser ORDER BY en combinaison avec LIMIT dans la requête
intermédiaire :
Code : SQL
(SELECT id, nom, 'Race' AS table_origine FROM Race ORDER BY nom DESC
LIMIT 6)
UNION
(SELECT id, nom_latin, 'Espèce' AS table_origine FROM Espece LIMIT
3);
id
nom
table_origine
7 Sphynx
Race
6 Singapura
Race
8 Nebelung
Race
5 Maine coon
Race
3 Boxer
Race
4 Bleu russe
Race
4 Alipiopsitta xanthops Espèce
1 Canis canis
Espèce
2 Felis silvestris
Espèce
En résumé
Pour grouper les résultats de deux requêtes SELECT, il suffit de placer UNION entre les deux requêtes.
UNION est équivalent à UNION DISTINCT. Si l'on ne veut pas éliminer les doublons, il faut utiliser UNION ALL.
Il est possible de limiter les résultats d'un UNION (avec LIMIT), mais également de limiter les résultats de chaque
requête composant l'UNION.
Par contre, ORDER BY n'aura d'influence que s'il est utilisé sur le résultat final d'un UNION.
Partie 2 : Index, jointures et sous-requêtes
135/414
www.openclassrooms.com
Précédent

- 135/413

Suivant