Базы данных
и язык SQL

Конструкция SQL LIMIT: использование в MySQL, аналоги в MS SQL Server

Конструкция MySQL LIMIT

Конструкция MySQL LIMIT служит для извлечения диапазона строк из таблицы базы данных. В зависимости от того, как эта конструкция прописана в запросе, можно извлечь либо определённое число начальных строк, либо определённое число строк, следующих за пропущенными начальными строками.

LIMIT 2 // вывести первые 2 строки LIMIT 3, 2 //пропустить первые 3 строки и вывести следующие за ними 2 строки

Конструкция LIMIT располагается в конце запроса.

В примерах работаем с базой данных "Недвижимость" и её таблицей "Объект" (OBJECT).

Obj_IDTypeDistrictRooms
1flatЦентр2
2flatЦентр2
3houseВолжский4
4flatЦентр2
5houseВолжский5
6flatПашино2
7flatЦентр3
8houseСосновка3
9flatСосновка1
10flatПашино2
11flatСосновка3
12flatСосновка2
13flatСосновка1

Пример 1. Требуется вывести две первые строки из таблицы. Пишем запрос с использованием LIMIT с одним параметром:

SELECT * FROM OBJECT LIMIT 2

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

Obj_IDTypeDistrictRooms
1flatЦентр2
2flatЦентр2

Перейдём к использованию конструкции LIMIT с двумя параметрами. Особенно удобно её применять, если требуется упорядочить строки по какому-либо столбцу с помощью оператора ORDER BY и вывести строки с определёнными значениями столбцов.

Пример 2. Так будет выглядеть наша таблица, если применить оператор ORDER BY и упорядочить объекты по числу комнат:

Obj_IDTypeDistrictRooms
13flatСосновка1
9flatСосновка1
12flatСосновка2
10flatПашино2
1flatЦентр2
6flatПашино2
4flatЦентр2
2flatЦентр2
8houseСосновка3
11flatСосновка3
7flatЦентр3
3houseВолжский4
5houseВолжский5

Требуется исключить из выборки объекты с числом комнат 1, 2 и 5. Следовательно, в результирующей таблице должны присутствовать объекты с числом комнат 3 и 4. Отсчитываем от начала число строк, которые следует исключить - их будет 8, и подсчитываем число строк, которые нужно вывести - их будет 4. Пишем запрос конструкцией LIMIT 8, 4. Приведём полностью запрос, в который вошёл и оператор ORDER BY для упорядочения строк:

SELECT * FROM OBJECT ORDER BY Rooms LIMIT 8, 4

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

Obj_IDTypeDistrictRooms
8houseСосновка3
11flatСосновка3
7flatЦентр3
3houseВолжский4

Аналоги: извлечение диапазона строк в MS SQL Server

В MS SQL Server можно также извлекать определённый диапазон строк, но для этого существуют другие конструкции и они немного сложнее, чем в MySQL.

Аналогом LIMIT с одним параметром является оператор TOP. Он может применяться только с одним параметром и служит для вывода из таблицы первых строк, число которых указано в качестве параметра.

TOP 2 // вывести первые 2 строки

Для более сложных манипуляций с диапазонами извлекаемых строк существуют операторы OFFSET и FETCH.

Если применять только оператор OFFSET, после которого указывается один параметр, то будут выведены все оставшиеся в таблице строки кроме первых, число которых указано в качестве параметра.

OFFSET 2 ROWS // вывести все строки, кроме первых двух

Аналогом LIMIT с двумя параметрами является конструкция из операторов OFFSET и FETCH. После первого из них указывается, сколько первых строк нужно пропустить. После второго указывается, сколько последующих строк нужно вывести.

OFFSET 3 ROWS FETCH NEXT 2 ROWS ONLY // пропустить первые 3 строки и вывести 2 следующие за ними строки

Пример 3. Требуется вывести две первые строки из таблицы. Пишем запрос с использованием оператора TOP:

SELECT TOP 2 * FROM OBJECT

При помощи применённого ограничения диапазона, так же как в примере 1, будет выведена следующая таблица:

Obj_IDTypeDistrictRooms
1flatЦентр2
2flatЦентр2

Пример 4. Как и в примере 2, строки в таблице упорядочены по числу комнат. Требуется исключить из выборки объекты с числом комнат 1 и 2. То есть пропустить первые 2 строки и вывести все остальные строки. Пишем запрос с оператором OFFSET:

SELECT * FROM OBJECT ORDER BY Rooms OFFSET 8 ROWS

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

Obj_IDTypeDistrictRooms
8houseСосновка3
11flatСосновка3
7flatЦентр3
3houseВолжский4
5houseВолжский5

Результирующая таблица отличается от полученной в примере 2, ведь теперь мы вывели кроме исключённых все строки до конца.

Пример 5. А теперь условие, полностью аналогичное условию примера 2, применяем конструкцию из операторов OFFSET и FETCH вместе.

Чтобы исключить из выборки объекты с числом комнат не только 1 и 2 (первые 8 строк), но и 5 (последняя строка), после оператора FETCH указываем, что нужно вывести лишь 4 строки, следующих после исключённых строк. Пишем запрос:

SELECT * FROM OBJECT ORDER BY Rooms OFFSET 8 ROWS FETCH NEXT 4 ROWS ONLY

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

Obj_IDTypeDistrictRooms
8houseСосновка3
11flatСосновка3
7flatЦентр3
3houseВолжский4

Поделиться с друзьями

Реляционные базы данных и язык SQL