Использование псевдостолбца rownum

Псевдостолбцы ведут себя аналогично столбцам таблицы, но реально не хранятся в таблице. Можно выбирать значения из псевдостолбцов, но нельзя вставлять, обновлять или удалять их значения.

Для каждой строки, возвращаемой запросом, псевдостолбец ROWNUM возвращает номер, указывающий порядок, в котором ORACLE выбирает эту строку из таблицы или множества соединенных таблиц. Первая выбираемая строка имеет ROWNUM, равный 1, вторая - 2, и т.д. ORACLE назначает значение ROWNUM каждой строке по мере ее извлечения, перед тем, как эти строки будут отсортированы фразой ORDER BY; поэтому фраза ORDER BY обычно не влияет на значение ROWNUM каждой строки. Однако, если фраза ORDER BY заставляет ORACLE использовать индекс для доступа к данным, то ORACLE может извлекать строки в ином порядке, нежели без индекса, так что значения ROWNUM в этом случае могут быть другими, чем без фразы ORDER BY.

Пример 42. Использование ROWNUM для того, чтобы ограничить число строк, выбираемых запросом:

SELECT * FROM student WHERE ROWNUM < 6;

Пример 43. Использование ROWNUM для того, чтобы присвоить уникальное значение каждой строке таблицы:

UPDATE mytable SET column1 = ROWNUM;

Пример 44. Условия, проверяющие, чтобы значение ROWNUM было больше положительного целого, всегда ложны. Cледующий запрос не вернет ни одной строки:

SELECT * FROM emp WHERE ROWNUM > 1;

Первой извлекаемой по этому запросу строке назначается ROWNUM, равный 1, что делает условие запроса ложным. Поэтому первой выбираемой становится вторая строка, и ей также назначается значение ROWNUM, равное 1, и опять условие запроса ложно. Таким образом, будут последовательно отброшены все строки.

Пример 45. Выберем неповторяющиеся значения баллов с присвоением им рангов. Ранг, равный единице, присваивается наибольшему баллу.

Псевдостолбцу ROWNUM присвоим псевдоним position:

SELECT ROWNUM position, ball FROM (SELECT DISTINCT ball FROM student ORDER BY ball DESC);

Результат:

position ball
   
   
   
   
   
   

В начало


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: