Problème :
Vous souhaitez limiter le nombre de lignes dans un jeu de résultats dans MySQL.
Exemple :
Notre base de données a une table nommée student
avec des données dans les colonnes id
, first_name
, last_name
, et age
.
identifiant | prénom | nom_de_famille | âge |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Miller | 19 |
4 | Marie | Marron | 25 |
5 | Lucie | Watson | 25 |
6 | Michel | Jackson | 22 |
Sélectionnons les noms complets et les âges des élèves, mais limitons les lignes renvoyées à trois.
Solution :
SELECT first_name, last_name, age FROM student LIMIT 3;
Voici le résultat de la requête :
identifiant | prénom | nom_de_famille | âge |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Miller | 19 |
Discussion :
La clause LIMIT limite le nombre de lignes dans le jeu de résultats. Il est utilisé dans l'instruction SELECT, généralement à la fin de l'instruction. (Même ORDER BY doit être listé avant LIMIT.)
Le seul argument obligatoire est le nombre de lignes à afficher. Dans notre exemple, LIMIT 3 a produit un jeu de résultats contenant trois lignes. Sauf indication contraire avec l'argument OFFSET, cette fonction renverra toujours le premier n lignes qui répondent aux exigences de la requête.
L'argument optionnel OFFSET de LIMIT est placé avant l'argument indiquant le nombre de lignes renvoyées. Il indique la position de la première ligne renvoyée par LIMIT (c'est-à-dire '0' est la première ligne, 1 est la deuxième ligne, etc.). Le décalage et le nombre de lignes sont séparés par une virgule.
La requête renvoie les mêmes enregistrements que la requête précédente car le décalage est égal à zéro. (Zéro est la valeur de décalage par défaut.)
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
Dans ces requêtes, les lignes de résultats ne sont pas triées. Si vous souhaitez sélectionner trois lignes dans un ensemble de résultats triés, utilisez ORDER BY :
SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
Ici, nous classons d'abord les lignes par âge (décroissant), puis nom de famille, puis prénom. Nous utilisons la valeur de décalage pour commencer sur la deuxième ligne renvoyée et limiter les résultats à trois lignes :
prénom | nom_de_famille | âge |
---|---|---|
Lucy | Watson | 25 |
Steven | Watson | 25 |
Michel | Jackson | 22 |
Cette requête trie d'abord les lignes en fonction de la colonne d'âge dans l'ordre décroissant. Il trie ensuite par last_name
et first_name
Dans l'ordre croissant. Si vous regardez le tableau, vous verrez que les élèves les plus âgés (Steven, Lucy, Mary) ont 25 ans. Cependant, Mary est omise car elle est la première ligne et le décalage est de 1 (c'est-à-dire que nous commençons par la deuxième ligne). Lucy est désormais la première car son prénom vient avant celui de Steven. (Steven et Lucy ont le même nom de famille, donc leur ordre est déterminé par le prénom.) Michael a 22 ans, ce qui fait de lui le deuxième étudiant le plus âgé et le dernier des trois rangées renvoyées.