Spec-Zone.ru › MariaDB

ОГРАНИЧЕНИЕ

Описание

Используйте LIMIT предложение для ограничения количества возвращаемых строк. При использовании одного целого числа n с LIMIT, будут возвращены первые n строк. Используйте предложение ORDER BY для управления тем, какие строки будут первыми. Вы также можете выбрать определённое количество строк после смещения, используя следующие способы:

LIMIT offset, row_count
LIMIT row_count OFFSET offset

При указании смещения m с ограничением n, первые m строк будут проигнорированы, а следующие n строк будут возвращены.

Выполнение UPDATE с LIMIT предложением небезопасно для репликации. LIMIT 0 является исключением из этого правила (см. MDEV-6170).

Существует оптимизация LIMIT ROWS EXAMINED, которая предоставляет возможность завершить выполнение запросов SELECT, которые проверяют слишком много строк, и таким образом используют слишком много ресурсов. См. LIMIT ROWS EXAMINED.

Обновления нескольких таблиц

MariaDB начиная с 10.3.2

До MariaDB 10.3.1 невозможно было использовать LIMIT (или ORDER BY) в операторе обновления UPDATE нескольких таблиц. Это ограничение было снято в MariaDB 10.3.2.

GROUP_CONCAT

MariaDB начиная с 10.3.2

Начиная с MariaDB 10.3.3, можно использовать LIMIT с GROUP_CONCAT().

Примеры

CREATE TABLE members (name VARCHAR(20));
INSERT INTO members VALUES('Jagdish'),('Kenny'),('Rokurou'),('Immaculada');

SELECT * FROM members;
+------------+
| name       |
+------------+
| Jagdish    |
| Kenny      |
| Rokurou    |
| Immaculada |
+------------+

Выберите первые два имени (без указания сортировки):

SELECT * FROM members LIMIT 2;
+---------+
| name    |
+---------+
| Jagdish |
| Kenny   |
+---------+

Все имена в алфавитном порядке:

SELECT * FROM members ORDER BY name;
+------------+
| name       |
+------------+
| Immaculada |
| Jagdish    |
| Kenny      |
| Rokurou    |
+------------+

Первые два имени в алфавитном порядке:

SELECT * FROM members ORDER BY name LIMIT 2;
+------------+
| name       |
+------------+
| Immaculada |
| Jagdish    |
+------------+

Третье имя в алфавитном порядке (первое имя имеет смещение ноль, поэтому третье имеет смещение два):

SELECT * FROM members ORDER BY name LIMIT 2,1;
+-------+
| name  |
+-------+
| Kenny |
+-------+

Начиная с MariaDB 10.3.2, LIMIT может использоваться в обновлении нескольких таблиц:

CREATE TABLE warehouse (product_id INT, qty INT);
INSERT INTO warehouse VALUES (1,100),(2,100),(3,100),(4,100);

CREATE TABLE store (product_id INT, qty INT);
INSERT INTO store VALUES (1,5),(2,5),(3,5),(4,5);

UPDATE warehouse,store SET warehouse.qty = warehouse.qty-2, store.qty = store.qty+2 
  WHERE (warehouse.product_id = store.product_id AND store.product_id  >= 1) 
    ORDER BY store.product_id DESC LIMIT 2;

SELECT * FROM warehouse;
+------------+------+
| product_id | qty  |
+------------+------+
|          1 |  100 |
|          2 |  100 |
|          3 |   98 |
|          4 |   98 |
+------------+------+

SELECT * FROM store;
+------------+------+
| product_id | qty  |
+------------+------+
|          1 |    5 |
|          2 |    5 |
|          3 |    7 |
|          4 |    7 |
+------------+------+

Начиная с MariaDB 10.3.3, LIMIT может использоваться с GROUP_CONCAT. Например, для следующей таблицы:

CREATE TABLE d (dd DATE, cc INT);

INSERT INTO d VALUES ('2017-01-01',1);
INSERT INTO d VALUES ('2017-01-02',2);
INSERT INTO d VALUES ('2017-01-04',3);

следующий запрос:

SELECT SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(":",dd,cc) ORDER BY cc DESC),",",1) FROM d;
+----------------------------------------------------------------------------+
| SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(":",dd,cc) ORDER BY cc DESC),",",1) |
+----------------------------------------------------------------------------+
| 2017-01-04:3                                                               |
+----------------------------------------------------------------------------+

может быть проще переписан как:

SELECT GROUP_CONCAT(CONCAT_WS(":",dd,cc) ORDER BY cc DESC LIMIT 1) FROM d;
+-------------------------------------------------------------+
| GROUP_CONCAT(CONCAT_WS(":",dd,cc) ORDER BY cc DESC LIMIT 1) |
+-------------------------------------------------------------+
| 2017-01-04:3                                                |
+-------------------------------------------------------------+

См. также

  • Функция ROWNUM()
  • SELECT
  • UPDATE
  • DELETE
  • Объединения и подзапросы
  • ORDER BY
  • GROUP BY
  • Общие выражения таблиц
  • SELECT WITH ROLLUP
  • SELECT INTO OUTFILE
  • SELECT INTO DUMPFILE
  • FOR UPDATE
  • LOCK IN SHARE MODE
  • Подсказки оптимизатора
  • SELECT ... OFFSET ... FETCH
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/limit/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API