Jusqu'à présent, nous avons appris à filtrer les lignes (WHERE), à les trier (ORDER BY) et à limiter le nombre de résultats (LIMIT). Dans les scénarios réels, vous utiliserez presque toujours ces clauses ensemble pour obtenir exactement les données souhaitées.
SQL impose un ordre strict pour ces clauses dans une requête. Si vous les placez dans le mauvais ordre, la base de données retournera une erreur.
La séquence correcte est :
SELECT (Quelles colonnes ?)FROM (Quelle table ?)WHERE (Filtrer les lignes en premier)ORDER BY (Trier les lignes filtrées)LIMIT (Prendre les X premiers résultats de la liste triée)OFFSET (Ignorer X lignes si besoin)Quand vous exécutez une requête combinée, la base de données la traite conceptuellement ainsi :
FROM.WHERE.ORDER BY.LIMIT pour ne retourner que la portion demandée.On filtre d'abord par catégorie, puis on trie par durée, et enfin on limite le résultat.
SELECT title, length, replacement_cost
FROM film
WHERE replacement_cost < 20.00
ORDER BY length ASC
LIMIT 5;
Cette requête trouve les 10 locations les plus récentes ayant duré plus de 5 jours.
SELECT rental_id, rental_date, return_date
FROM rental
WHERE return_date - rental_date > 5
ORDER BY rental_date DESC
LIMIT 10;
Trouver les 3 premiers acteurs dont le nom de famille commence par 'B', triés par leur prénom.
SELECT first_name, last_name
FROM actor
WHERE last_name LIKE 'B%'
ORDER BY first_name
LIMIT 3;
Dans la leçon précédente, nous avons vu la pagination basique avec LIMIT et OFFSET. En pratique, on pagine sur une liste filtrée et triée.
ORDER BY, la base peut retourner les lignes dans un ordre différent à chaque page, ce qui peut entraîner des doublons ou des oublis.Pour la page "N" avec "S" résultats par page :
LIMIT SOFFSET (N - 1) * SAfficher la deuxième page (5 résultats par page) des acteurs dont le prénom commence par "A", triés par nom de famille :
SELECT first_name, last_name
FROM actor
WHERE first_name LIKE 'A%'
ORDER BY last_name
LIMIT 5 OFFSET 5; -- Page 2 : ignorer 5, prendre 5
Points clés de cette leçon :
WHERE -> ORDER BY -> LIMIT.WHERE sont appliquées avant le tri et la limitation.LIMIT avec ORDER BY pour des résultats cohérents.Dans le module suivant, nous irons au-delà de la simple récupération de lignes et explorerons les fonctions d'agrégation pour calculer des totaux, moyennes et comptes sur des ensembles de données.