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, содержащая следующие данные:

EmployeeIDEmployeeNameSalary
1John Smith50000
2Maria Garcia60000
3Liam Johnson70000
4Emma Wilson80000
5Oliver Brown90000

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":

Пример

SELECT * FROM Websites LIMIT 2;

После выполнения приведённого выше SQL данные выглядят следующим образом:



Пример SQL SELECT TOP PERCENT

В Microsoft SQL Server также можно использовать процент в качестве параметра.

Следующий оператор SQL выбирает первые 50 процентов записей из таблицы websites:

Пример

Следующие операции можно выполнить в базе данных Microsoft SQL Server.

SELECT TOP 50 PERCENT * FROM Websites;
Другие расширения