English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

TOP SQL / Préfixe LIMIT MySQL

Dans ce tutoriel, vous apprendrez comment récupérer un nombre spécifique d'enregistrements à partir d'une table.

Limiter les résultats

Dans certains cas, vous n'avez peut-être pas besoin de retourner toutes les lignes de la requête, par exemple, si vous ne souhaitez检索最近加入该组织的前10employés, ou selon les points obtenus, les premier3étudiants, etc.

Pour traiter ce cas, vous pouvez utiliser la clause TOP dans l'expression SELECT SQL. Cependant, cette clause TOP n'est supportée que par les systèmes de bases de données SQL Server et MS Access.

MySQL fournit une clause LIMIT équivalente, tandis que Oracle fournit une clause ROWNUM pour les expressions SELECT pour limiter le nombre de lignes retournées par la requête.

La syntaxe TOP de SQL

La clause TOP de SQL est utilisée pour limiter le nombre de lignes retournées. Sa syntaxe de base est :

SELECT TOP number | percent column_list FROM table_name;

Ici,column_listest une liste de noms de colonnes ou de champs de la table de base de données à obtenir leurs valeurs, séparés par des virgules (par exemplename,age,countryetc.). Voyons comment cela fonctionne.

Supposons que nous ayons dans la base de données uneemployeesLe tableau, qui contient les enregistrements suivants :

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 | NULL |
+--------+--------------+------------+--------+---------+

La requête suivante renvoieEmployé (employees)Les trois employés les mieux payés du tableauEmployé.

-- Syntaxe pour la base de données SQL Server  
SELECT TOP 3 * FROM employees
ORDER BY salary DESC;

Les résultats du jeu de résultats sont les suivants :

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
+--------+--------------+------------+--------+---------+

Si vous ne souhaitez rechercher que le pourcentage de lignes plutôt qu'un nombre fixe de lignes, vous pouvez utiliser le mot-clé PERCENT après la valeur fixe de la clause TOP. Les valeurs décimales sont arrondies au prochain entier (par exemple,1.5arrondi à2)。

La requête suivante renvoie les employés les mieux payés30% des employés.

-- La syntaxe de la base de données SQL Server
SELECT TOP 30 PERCENT * FROM employees
ORDER BY salary DESC;

Les résultats du jeu de résultats de la requête ci-dessus seront les suivants :

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
+--------+--------------+------------+--------+---------+

La syntaxe LIMIT de MySQL

La clause LIMIT de MySQL a la même fonction que la clause TOP de SQL. Sa syntaxe de base est :

SELECT column_list FROM table_name LIMIT number;

La requête suivante renvoieEmployé (employees)Les trois employés les mieux payés du tableauEmployé.

-- La syntaxe de la base de données MySQL
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 3;

Après l'exécution, vous obtiendrez le résultat suivant :

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
+--------+--------------+------------+--------+---------+

Attention : Dans l'expression SELECT, il faut toujoursORDER BYLes clauses sont utilisées avec la clause LIMIT. Sinon, vous risquez de ne pas obtenir les résultats idéaux.

Définir le décalage de ligne dans la clause LIMIT

La clause LIMIT accepte un second paramètre optionnel.

Lorsque deux paramètres sont spécifiés, le premier paramètre spécifie le décalage de la première ligne à retourner, c'est-à-dire le point de départ, tandis que le second paramètre spécifie le nombre maximum de lignes à retourner. Le décalage initial de la ligne est 0 (pas1)

Par conséquent, si vous souhaitez trouver l'employé dont le salaire est le troisième plus élevé, vous pouvez exécuter l'opération suivante :

-- Syntaxe de la base de données MySQL
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 2, 1;

Après l'exécution de la commande ci-dessus, seule une enregistrement sera obtenue dans le jeu de résultats :

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
+--------+--------------+------------+--------+---------+