ОГРАНИЧЕНИЕ
Описание
Используйте 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.1 невозможно было использовать LIMIT (или ORDER BY) в операторе обновления UPDATE нескольких таблиц. Это ограничение было снято в MariaDB 10.3.2.
GROUP_CONCAT
Начиная с 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 |
+-------------------------------------------------------------+
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/limit/