Oracle ROWNUM
Oracle ROWNUM - это псевдоколонка, которая присваивает каждой возвращаемой строке уникальный номер. ROWNUM начинается с 1 для первой возвращаемой строки и инкрементируется на 1 для каждой последующей строки.
Для понимания работы псевдоколонки ROWNUM давайте рассмотрим пример:
Предположим, у нас есть таблица "Employees" со следующей структурой и данными:
CREATE TABLE Employees (
employee_id NUMBER,
first_name VARCHAR2(50),
last_name VARCHAR2(50)
);
INSERT INTO Employees (employee_id, first_name, last_name)
VALUES (1, 'John', 'Doe');
INSERT INTO Employees (employee_id, first_name, last_name)
VALUES (2, 'Jane', 'Smith');
INSERT INTO Employees (employee_id, first_name, last_name)
VALUES (3, 'Bob', 'Johnson');
Одним из способов использования псевдоколонки ROWNUM является ограничение количества возвращаемых строк в результате запроса. Например, мы можем ограничить результаты запроса так, чтобы получить только первые две строки:
SELECT employee_id, first_name, last_name
FROM Employees
WHERE ROWNUM <= 2;
В результате получим:
EMPLOYEE_ID FIRST_NAME LAST_NAME
1 John Doe
2 Jane Smith
Мы также можем использовать псевдоколонку ROWNUM для нумерации строк в результате запроса, например:
SELECT ROWNUM AS row_number, first_name, last_name
FROM Employees;
В результате получим:
ROW_NUMBER FIRST_NAME LAST_NAME
1 John Doe
2 Jane Smith
3 Bob Johnson
Обратите внимание, что нумерация строк с помощью ROWNUM начинается с 1 и инкрементируется на каждой последующей строке.
Однако следует учитывать следующую особенность - псевдоколонка ROWNUM присваивается строкам до применения ограничений WHERE. То есть, если мы напишем запрос с ограничением по значению ROWNUM, результат может быть непредсказуемым. Например:
SELECT ROWNUM AS row_number, first_name, last_name
FROM Employees
WHERE ROWNUM <= 2;
Мы можем получить различные результаты, как, например:
ROW_NUMBER FIRST_NAME LAST_NAME
1 John Doe
или
ROW_NUMBER FIRST_NAME LAST_NAME
1 Jane Smith
Это связано с тем, что Oracle сначала выбирает строки, а затем присваивает им значения ROWNUM.
В целом, псевдоколонка ROWNUM очень полезна для ограничения результатов запроса или для нумерации строк в результате запроса в Oracle. Однако важно понимать ее особенности и использовать ее с учетом этих ограничений.