SQL SELECT TOP, LIMIT, ROWNUMПредложения
Предложение SQL SELECT TOP
Оператор SELECT TOP используется для ограничения количества строк в наборе результатов, возвращаемом в SQL. Обычно он применяется, когда нужно запросить только первые несколько строк данных, особенно если набор данных очень велик, так как это может значительно повысить производительность запроса.
Предложение SELECT TOP очень полезно для больших таблиц с тысячами записей.
Примечание:
SELECT TOPИспользуется в SQL Server и MS Access, тогда как в MySQL и PostgreSQL используетсяLIMITключевое слово.- До версии 12c Oracle не имел напрямую эквивалентного ключевого слова; можно было
ROWNUMреализовать аналогичную функциональность, но в версии 12c и выше было введеноFETCH FIRST。 - При использовании
TOPилиLIMIT, лучше всего комбинировать сORDER BYпредложение, чтобы гарантировать, что возвращённые строки являются первыми несколькими строками в определённом порядке.
Синтаксис SQL Server / MS Access
SELECT TOP number|percent column1, column2, ... FROM table_name;
number|percent: указывает количество строк или процент для возврата.
number: конкретное количество строк.percent: процент от набора данных.
Синтаксис MySQL
SELECT column1, column2, ... FROM table_name LIMIT number;
Синтаксис Oracle
SELECT column1, column2, ... FROM table_name FETCH FIRST number ROWS ONLY;
Синтаксис PostgreSQL
SELECT column1, column2, ... FROM table_name LIMIT number;
Примеры
Предположим, у нас есть таблица с именем Employees, содержащая следующие данные:
| EmployeeID | EmployeeName | Salary |
|---|---|---|
| 1 | John Smith | 50000 |
| 2 | Maria Garcia | 60000 |
| 3 | Liam Johnson | 70000 |
| 4 | Emma Wilson | 80000 |
| 5 | Oliver Brown | 90000 |
SQL Server и MS Access возвращают первые 3 строки данных:
SELECT TOP 3 EmployeeName, Salary FROM Employees;
Возвращает первые 10% данных:
SELECT TOP 10 PERCENT EmployeeName, Salary FROM Employees;
MySQL возвращает первые 3 строки данных:
SELECT EmployeeName, Salary FROM Employees LIMIT 3;
PostgreSQL возвращает первые 3 строки данных:
SELECT EmployeeName, Salary FROM Employees LIMIT 3;
Oracle возвращает первые 3 строки данных:
SELECT EmployeeName, Salary FROM Employees FETCH FIRST 3 ROWS ONLY;
Демонстрационная база данных
В этом руководстве мы будем использовать образец базы данных EXAMPLE.
Ниже приведены данные, выбранные из таблицы "Websites":
mysql> SELECT * FROM Websites; +----+---------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+---------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | Example | http://www.example.com/ | 5000 | USA | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+
Пример MySQL SELECT LIMIT
Следующий SQL-запрос выбирает первые две записи из таблицы "Websites":
Пример
После выполнения приведённого выше SQL данные выглядят следующим образом:
Пример SQL SELECT TOP PERCENT
В Microsoft SQL Server также можно использовать процент в качестве параметра.
Следующий оператор SQL выбирает первые 50 процентов записей из таблицы websites:
Пример
Следующие операции можно выполнить в базе данных Microsoft SQL Server.