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

Предложение TOP / MySQL LIMIT SQL

В этом руководстве вы узнаете, как извлекать указанное количество записей из таблицы.

Ограничение набора результатов

В некоторых случаях вам может не понадобиться возвращать все строки запроса, например, если вы хотите检索 первых 10 сотрудников, недавно вступивших в организацию, или первых 3 студентов по оценкам, и т.д.

Чтобы обработать这种情况, в предложении SELECT можно использовать предложение TOP. Однако, предложение TOP поддерживается только системами баз данных SQL Server и MS Access.

MySQL предоставляет эквивалентную LIMIT предложению, а Oracle предоставляет предложение ROWNUM для SELECT, чтобы ограничить количество возвращаемых строк.

Грамматика SQL TOP

Подзапрос TOP SQL используется для ограничения количества возвращаемых строк. Основная грамматика:

SELECT TOP number | percent column_list FROM table_name;

Здесь,column_listСписок имен столбцов или полей базы данных, разделенных запятыми, для получения их значений (напримерname,age,countryи т.д.). Давайте посмотрим, как это работает.

Предположим, что у нас естьemployeesТаблица, которая содержит следующие записи:

+--------+--------------+------------+--------+---------+
| 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 |
+--------+--------------+------------+--------+---------+

Следующие предложения возвращаютСотрудники (employees)в таблице с самыми высокими доходами в前三 местахСотрудники.

-- Синтаксис базы данных SQL Server  
SELECT TOP 3 * FROM employees
ORDER BY salary DESC;

Результаты, возвращаемые, будут выглядеть следующим образом:

+--------+--------------+------------+--------+---------+
| 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 |
+--------+--------------+------------+--------+---------+

Если вы хотите retrieve百分比 строк, а не фиксированное количество строк, вы можете использовать ключевое слово PERCENT после фиксированного значения в подъязыке TOP. Ложные значения оканчиваются на следующий целое значение (например, 1.5 оканчивается на 2).

Следующие предложения возвращают 30% сотрудников с самыми высокими доходами.

-- Синтаксис базы данных SQL Server
SELECT TOP 30 PERCENT * FROM employees
ORDER BY salary DESC;

Результаты, возвращаемые этим запросом, будут выглядеть следующим образом:

+--------+--------------+------------+--------+---------+
| 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 |
+--------+--------------+------------+--------+---------+

Синтаксис LIMIT MySQL

Подъязык LIMIT MySQL выполняет ту же функцию, что и подъязык TOP SQL. Его базовая грамматика такая:

SELECT column_list FROM table_name LIMIT number;

Следующие предложения возвращаютСотрудники (employees)в таблице с самыми высокими доходами в前三 местахСотрудники.

-- Синтаксис базы данных MySQL
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 3;

После выполнения, вы получите следующий результат:

+--------+--------------+------------+--------+---------+
| 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 |
+--------+--------------+------------+--------+---------+

Примечание: В предложении SELECT всегда используйтеORDER BYПредложение должно использоваться вместе с подьязыком LIMIT. В противном случае, вы можете не получить желаемый результат.

Установка смещения строки в подьязыке LIMIT

Подъязык LIMIT принимает опциональный второй параметр.

При указании двух параметров первый параметр указывает на смещение первой строки, которая будет возвращена, а второй параметр указывает на максимальное количество строк, которые будут возвращены. Смещение начальной строки равно 0 (не 1).

Таким образом, чтобы найти сотрудника с третьей по величине зарплатой, можно выполнить следующие действия:

-- Грамматика базы данных MySQL
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 2, 1;

После выполнения вышеуказанной команды, в результирующем наборе будет только одно запис

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