English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве вы узнаете, как извлекать указанное количество записей из таблицы.
В некоторых случаях вам может не понадобиться возвращать все строки запроса, например, если вы хотите检索 первых 10 сотрудников, недавно вступивших в организацию, или первых 3 студентов по оценкам, и т.д.
Чтобы обработать这种情况, в предложении SELECT можно использовать предложение TOP. Однако, предложение TOP поддерживается только системами баз данных SQL Server и MS Access.
MySQL предоставляет эквивалентную LIMIT предложению, а Oracle предоставляет предложение ROWNUM для SELECT, чтобы ограничить количество возвращаемых строк.
Подзапрос 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 выполняет ту же функцию, что и подъязык 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 принимает опциональный второй параметр.
При указании двух параметров первый параметр указывает на смещение первой строки, которая будет возвращена, а второй параметр указывает на максимальное количество строк, которые будут возвращены. Смещение начальной строки равно 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 | +--------+--------------+------------+--------+---------+