Как извлечь первые N строк в Oracle
Подготовим данные
create table test_rows as select level lvl from dual connect by level
Получим первые две строки:
select * from test_rows where rownum < 3; LVL ---------- 1 2
Таким образом можно ограничить количество строк, но вот проблема: rownum вычисляется до сортировки:
select * from test_rows where rownum < 3 order by lvl desc;
LVL
———-
2
1
Это можно обойти за счёт вложенного запроса:
select * from (select * from test_rows order by lvl desc) where rownum 5;
Это не самое удачное решение. Начиная с версии 12.1 появилась возможность получать top N записей проще, как и делать разделение по страницам.
Самый первый запрос, получение двух строк можно переписать в виде:
select * from test_rows fetch first 2 rows only; LVL 1 2
select * from test_rows order by lvl desc fetch first 2 rows only; LVL ---------- 10 9
Запрос на получение второй страницы:
select * from test_rows order by lvl offset 5 rows fetch next 5 rows only; LVL ---------- 6 7 8 9 10
Также можно получить только определенный процент записей:
select * from test_rows order by lvl fetch next 30 percent rows only; LVL ---------- 1 2 3
Также существует возможность получить больше строк, чем было запрошено, при наличии order by и дубликатов:
update test_rows set lvl = 1 where lvl in (2, 3); select * from test_rows order by lvl fetch next 1 rows only; LVL ---------- 1 select * from test_rows order by lvl fetch next 1 rows with ties; LVL ---------- 1 1 1
Увы, магии не существует и в текущих версиях fetch first при выполнении прозрачно для пользователя переписывается на использование rownum. Поэтому с точки зрения производительности разницы почти нет(есть данные что некоторые варианты подобных запросов могут использовать менее эффективную сортировку).
Как выбрать первые 10 строк в MySQL
Подскажите как организовать поиск. Нужно выводить следующие, либо предыдущие 10 строк. К примеру: последний результат строки закончился id 12, а следующие строки с id 27,28,29.. Т.е нужно как то запоминать последний результат, зная в какую сторону идет поиск, вперед или назад. Буду очень признателен если поможете.
Отслеживать
user177221
задан 21 янв 2017 в 7:19
317 1 1 золотой знак 3 3 серебряных знака 10 10 бронзовых знаков
Чем не устраивает LIMIT 0,10 ? Для MySql это аналог TOP 10 из MS SQL.
21 янв 2017 в 8:17
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Чем не устраивает LIMIT 0,10 ? Для MySql это аналог TOP 10 из MS SQL.
SELECT `ID`, `TIMESTAMP_X`, `LOGIN`, `PASSWORD`, `CHECKWORD`, `ACTIVE`, `NAME` FROM `b_user` WHERE 1 = 1 AND id > 5 LIMIT 0, 2;
Вы спрашиваете также не только десять "следующих" строк, но и "десять предыщущих". Тут вам нужно просто поменять направление при помощи ORDER BY , т.к. отрицательные значения в LIMIT нельзя использовать.
SELECT `ID`, `TIMESTAMP_X`, `LOGIN`, `PASSWORD`, `CHECKWORD`, `ACTIVE`, `NAME` FROM `b_user` WHERE 1 = 1 AND id < 7 ORDER BY `ID` DESC LIMIT 0, 2;
Руководство по SQL. Вывод первых результатов.
Для того, чтобы получить первые N записей или M процентов записей из таблицы, в языке SQL предусмотрен элемент TOP.
Стоит отметить, что данное ключевое слово поддерживается не всеми базами данных (далее – БД). Например, в RDBMS MySQL для этих целей используется команда LIMIT.
Общий вид данного запроса имеет следующий вид:
SELECT TOP количество|процент имя_колонки(колонок) FROM имя_таблицы WHERE [условие];
Для MySQL, подобный запрос будет выглядеть следующим образом:
SELECT колонка1, колонка2 . колонкаN FROM имя_таблицы LIMIT число_записей;
Пример:
Предположим, что у нас есть таблица developers, которая содержит следующие записи:
+----+-------------------+------------+------------+--------+ | ID | NAME | SPECIALTY | EXPERIENCE | SALARY | +----+-------------------+------------+------------+--------+ | 1 | Eugene Suleimanov | Java | 2 | 2500 | | 2 | Peter Romanenko | Java | 3 | 3500 | | 3 | Andrei Komarov | JavaScript | 3 | 2500 | | 4 | Konstantin Geiko | C# | 2 | 2000 | | 5 | Asya Suleimanova | UI/UX | 2 | 1800 | +----+-------------------+------------+------------+--------+
Допустим ,что нам необходимо получить только первые две записи. Для этого нам необходимо выполнить команду, которая указана ниже:
mysql> SELECT * FROM developers LIMIT 2;
В результате выполнения данного запроса мы получим следующий результат:
+----+-------------------+-----------+------------+--------+ | ID | NAME | SPECIALTY | EXPERIENCE | SALARY | +----+-------------------+-----------+------------+--------+ | 1 | Eugene Suleimanov | Java | 2 | 2500 | | 2 | Peter Romanenko | Java | 3 | 3500 | +----+-------------------+-----------+------------+--------+
На этом мы заканчиваем изучение способов вывода первых записей таблицы.
В следующей статье мы рассмотрим способы сортировки данных, получаемых в результате выполнения запроса.
SQL SELECT TOP, LIMIT, ROWNUM
Инструкция SELECT TOP используется для указания количества возвращаемых записей.
Инструкция SELECT TOP полезно для больших таблиц с тысячами записей. Возврат большого количества записей может повлиять на производительность.
Примечание: Не все базы данных поддерживают SELECT TOP. MySQL поддерживает предложение LIMIT для выбора ограниченного числа записей, в то время как Oracle использует ROWNUM.
Синтаксис SQL Server / MS Access:
SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;
Синтаксис MySQL:
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
Синтаксис Oracle:
SELECT column_name(s)
FROM table_name
WHERE ROWNUM number;
Демо база данных
Ниже приведен выбор из таблицы "Customers" в образце базы данных Northwind:
Примеры SQL TOP, LIMIT и ROWNUM
Следующая инструкция SQL выбирает первые три записи из таблицы "Customers":
Пример
SELECT TOP 3 * FROM Customers;
Следующий оператор SQL показывает эквивалентный пример использования предложения LIMIT:
Пример
SELECT * FROM Customers
LIMIT 3;
Следующая инструкция SQL показывает соответствующий пример использования параметра ROWNUM:
Пример
SELECT * FROM Customers
WHERE ROWNUM <= 3;
Пример SQL TOP PERCENT
Следующая инструкция SQL выбирает первые 50% записей из таблицы "Customers":
Пример
SELECT TOP 50 PERCENT * FROM Customers;
Добавить WHERE
Следующая инструкция SQL выбирает первые три записи из таблицы "Customers", где страна - "Germany":
Пример
SELECT TOP 3 * FROM Customers
WHERE Country='Germany';
Следующий оператор SQL показывает эквивалентный пример использования LIMIT:
Пример
SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;
Следующая инструкция SQL показывает соответствующий пример использования параметра ROWNUM:
Пример
SELECT * FROM Customers
WHERE Country='Germany' AND ROWNUM <= 3;
Мы только что запустили
SchoolsW3 видео
курс сегодня!
Сообщить об ошибке
Если вы хотите сообщить об ошибке или внести предложение, не стесняйтесь отправлять на электронное письмо:
Ваше предложение:
Спасибо Вам за то, что помогаете!
Ваше сообщение было отправлено в SchoolsW3.
Schoolsw3 оптимизирован для бесплатного обучения, проверки и подготовки знаний. Примеры в редакторе упрощают и улучшают чтение и базовое понимание. Учебники, ссылки, примеры постоянно пересматриваются, чтобы избежать ошибок, но не возможно гарантировать полную правильность всего содержания. Некоторые страницы сайта могут быть не переведены на РУССКИЙ язык, можно отправить страницу как ошибку, так же можете самостоятельно заняться переводом. Используя данный сайт, вы соглашаетесь прочитать и принять Условия к использованию, Cookies и политика конфиденциальности.