Как в Oracle выбрать первые N записей




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

В других СУБД для этого изначально были специальные конструкции в языке SQL. В Oracle всё это появилось гораздо позже.

Есть несколько популярных способов. Каждый имеет плюсы и минусы, ну и от версии зависит.

Первый способ. С помощью конструкции "SELECT FROM SELECT"

Делаем два запроса: сначала сортируем, затем выбираем нужное количество.

    SELECT user_id
          , first_n
       FROM (SELECT user_id
                  , first_n
               FROM customers
           ORDER BY user_id)
WHERE ROWNUM < 11;

   USER_ID FIRST_N
----------- ----------
         1 Андрей
         2 Иван
         3 Николай
         4 Андрей
         5 Алексей
         6 Тимофей
         7 Юрий
         8 Юрий
         9 Александр
        10 Игорь

10 rows selected.

Конструкции SELECT-FROM-SELECT в Oracle 7 не было и приходилось изгалятся ещё круче. Но эти коды уже канули в прошлое.

Второй сопособ. "Классика".

   SELECT * 
     FROM (
            SELECT user_id
                 , row_number() over (order by user_id) rn
              FROM customers
          )
     WHERE rn < 11;    

С виду похож на первый способ, но на самом деле более универсальный. Позволяет получить не только первую десятку, но и вторую, третью и т.д

Просто надо переписать последюю строку в как-то так: WHERE 0 < rn and rn < 21


Третий способ. "Новомодный". Работает в Oracle 12c.

     SELECT user_id
          , first_n
       FROM customers
   ORDER BY user_id
FETCH FIRST 10 ROWS ONLY;  

Здесь всё за счёт конструкции FETCH FIRST ROWS. Oracle потребовалось дойти до 12-ой версии, чтобы эту конструкцию ввести в язык.






Опубликован: 21 сентября 2016, 12:41


Похожие статьи:

  1. Как создавать дампы в Oracle с помощью Data Pump

    Если нужно перенести объекты схемы из одной базы в другую, то проще всего это сделать с помощью технологии Oracle Data Pump. Прежде чем вникать в детали работы с Data Pump, давайте уточним: у нас есть физические резервные копии и логические дампы.

  2. Как и чем создать Backup в Oracle

    Чтобы после сбоя в системе (например, отказа жесткого диска) восстановить базу нужно иметь под рукой резервную копию. (Нет резервной копии — прощай работа )) Чем свежее копия, тем лучше. Более того: резервная копия базы должна быть полной и непротиворечивой.

  3. Научим SQL*Plus говорить по-русски

    Долго не мог понять, почему люди не любят пользоваться SQL*Plus. Оказывается: интерфейс убогий и бестолковый. Словом, не графический – мышкой ткнуть не куда (значит интуитивно не понятный). Мда.... ..редко встретишь кодера, умеющего мышкой воять SELECT’ы.


Ваш комментарий:



cod

Все поля обязательны для заполнения.
Ваш email не публикуется.