Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment limiter les lignes dans un jeu de résultats MySQL

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.