ROWNUM в Oracle SQL — как ограничить выборку строк

🟢 ROWNUM в Oracle SQL. Введение

ROWNUM — это псевдостолбец в Oracle SQL, который возвращает номер строки в результате запроса до выполнения сортировки. Он часто используется для ограничения количества строк, например, для первых 10 записей или быстрой выборки одной строки.

В отличие от ROW_NUMBER() в оконных функциях, ROWNUM работает быстро, но требует аккуратного обращения, особенно в сочетании с ORDER BY.


🔤 Написание

sql
SELECT * FROM имя_таблицы WHERE ROWNUM <= N;

🔄 Где используется ROWNUM

  • Выборка первых N строк

  • Проверка существования данных

  • Ограничение количества результатов

  • Быстрая проверка условий

  • Отладка и тестирование


🧪 10 Примеров использования РОУНУМ

1️⃣ Получить 5 первых строк

sql
SELECT * FROM employees
WHERE ROWNUM <= 5;

2️⃣ Проверка наличия данных

sql
SELECT 1
FROM employees
WHERE department_id = 50 AND ROWNUM = 1;

3️⃣ Удалить одну строку

sql
DELETE FROM employees
WHERE department_id = 80 AND ROWNUM = 1;

4️⃣ ROWNUM и ORDER BY — ловушка

sql
-- Не работает как ожидается:
SELECT * FROM employees
WHERE ROWNUM <= 5
ORDER BY salary DESC;
— ROWNUM назначается до сортировки

5️⃣ Корректная выборка топ-N с сортировкой

sql
SELECT * FROM (
SELECT * FROM employees ORDER BY salary DESC
)
WHERE ROWNUM <= 5;

6️⃣ Именование псевдостолбца

sql
SELECT ROWNUM AS строка_номер, first_name
FROM employees;

7️⃣ Получить первую строку из подзапроса

sql
SELECT * FROM (
SELECT * FROM departments WHERE location_id = 1700
)
WHERE ROWNUM = 1;

8️⃣ Использование в PL/SQL

plsql
DECLARE
v_name employees.first_name%TYPE;
BEGIN
SELECT first_name INTO v_name
FROM employees
WHERE department_id = 90 AND ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE(‘Имя: ‘ || v_name);
END;

9️⃣ Создание запроса «Случайная строка»

sql
SELECT * FROM (
SELECT * FROM employees ORDER BY DBMS_RANDOM.VALUE
)
WHERE ROWNUM = 1;

🔟 ROWNUM в EXISTS

sql
SELECT department_id
FROM departments d
WHERE EXISTS (
SELECT 1 FROM employees e
WHERE e.department_id = d.department_id AND ROWNUM = 1
);

🧩 Заключение

ROWNUM — простой и быстрый способ ограничить выборку строк, но требует понимания своего поведения. Он назначается до сортировки, поэтому для топ-N запросов с ORDER BY всегда оборачивайте его во вложенный запрос.

💡 Запомни:

  • ROWNUMROW_NUMBER()

  • Назначается до ORDER BY

  • Идеален для WHERE ROWNUM = 1, EXISTS, тестов

  • Используй вложенные SELECT’ы для правильной сортировки


🔜 Следующая статья:

ROWIDTOCHAR в Oracle SQL — как преобразовать адрес строки в читаемый формат


 

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии