Aplicación de Oracle: Rownum

Para rownum, es la asignación secuencial del sistema Oracle de los números de fila devueltos por la consulta. A la primera fila devuelta se le asigna la segunda fila y así sucesivamente. Este pseudocampo se puede utilizar para limitar los resultados de la consulta. El número total de filas y el número de fila no pueden tener como prefijo el nombre de ninguna tabla

Ejemplo

Por ejemplo, la estructura de la tabla de la tabla de estudiantes es

ID ?varchar() ID de estudiante

nombre  varchar() Nombre

 crear tabla estudiante (ID varchar() nombre varchar()

);

insertar en valores de estudiantes(张一);

insertar en valores de estudiantes(王二

insertar en valores de estudiantes(李三); >insertar en valores de estudiante(Zhao Si);

mit;

( ) rownum Para condiciones de consulta iguales a un determinado valor

Si desea encontrar el La información del primer estudiante en la tabla de estudiantes puede usar Rownum = como condición, pero si desea encontrar la información del segundo estudiante en la tabla de estudiantes, use Rownum =. El resultado es que los datos no se pueden encontrar porque Rownum proviene de todos. desde el principio, pero los números naturales anteriores se consideran condiciones falsas cuando Rownum es igual al juicio, por lo que no se puede encontrar Rownum = n (ngt; número natural)

SQLgt select rownum id name from Student. donde rownum=; (se puede utilizar para limitar el número de registros devueltos para garantizar que no haya errores, como cursores implícitos)

SQLgt; seleccione el nombre de identificación de rownum del estudiante donde rownum=; > NOMBRE DE ID DE ROWNUM

Zhang Yi

 SQLgt; seleccione el nombre de ID de Rownum del estudiante donde

NOMBRE DE ID DE ROWNUM <; /p>

 

 ()rownum es para condiciones de consulta mayores que un cierto valor

Si desea encontrar los registros a partir de la segunda fila, use rownumgt. La razón por la que no se puede encontrar el registro es porque rownum es una pseudocolumna que siempre comienza desde el principio. Oracle cree que n(ngt; es un número natural). Esta condición aún no se cumple, por lo que no se puede encontrar el registro.

SQLgt; seleccione el nombre de ID de Rownum del estudiante donde Rownum gt;

NOMBRE DE ID DE ROWNUM

Entonces, ¿cómo podemos encontrar los registros después del segundo? fila? Puede usar el siguiente método de subconsulta para resolverlo. Tenga en cuenta que el número de fila en la subconsulta debe tener un alias; de lo contrario, no se encontrará el registro. Esto se debe a que el número de fila no es una tabla. es imposible saber si rownum es una columna de la subconsulta o de la consulta principal

SQLgt select * from(sele;

ct rownum sin nombre de identificación del estudiante) donde nogt;

SIN NOMBRE DE ID

Li San

Zhao Si

SQLgt; seleccione * de (seleccione el nombre de ID de Rownum del estudiante) donde Rownumgt

NOMBRE DE ID DE ROWNUM

() Rownum para condiciones de consulta inferiores a un determinado valor < / p>

Si desea encontrar el registro anterior al tercer registro, use rownumlt; puede obtener dos registros. Obviamente, se considera que la condición de rownum para rownumlt;n ((ngt; un número natural)) es. true, para que puedas encontrar el registro

SQLgt; select rownum id name from Student donde rownum lt

ROWNUM ID NAME

Zhang Yi

Wang Er

En resumen, en las situaciones anteriores, a veces puede ser necesario consultar los datos de Rownum en un intervalo determinado. ¿Qué debemos hacer? Arriba, podemos ver que Rownum es artificialmente verdadero para condiciones de consulta que son menores que un cierto valor. Rownum es verdadero para Una condición de consulta mayor que un cierto valor se considera directamente falsa, pero se puede convertir indirectamente en verdadera. debe usarse Por ejemplo, si desea consultar datos de Rownum entre la segunda y tercera fila, incluida la segunda fila y Para la tercera fila de datos, solo podemos escribir la siguiente declaración Primero, deje que devuelva filas de registros menores. o igual a tres, y luego determine en la consulta principal las filas de registro donde la columna de alias del nuevo número de fila es mayor o igual a dos. Sin embargo, dicha operación afectará la velocidad en un conjunto de datos grande.

SQLgt; seleccione * de (seleccione rownum sin nombre de identificación del estudiante donde rownumlt; = ) donde no gt =

SIN NOMBRE DE ID

Wang Er

Li San

() rownum y clasificación

El rownum en Oracle es el número de serie generado al recuperar datos, por lo que si desea especificar los datos de la fila de Rowmun para los datos ordenados especificados, debe prestar atención

SQLgt; seleccione el nombre de identificación de Rownum del orden del estudiante por nombre

NOMBRE DE ID DE ROWNUM

Li San

Wang Er

Zhang Yi

Zhao Si

Se puede ver que Rownum es not El sistema de números de serie no se genera en función de la columna de nombre. El número de ID de fila también se asigna secuencialmente según el orden cuando se inserta el registro. Para resolver este problema, se debe utilizar una subconsulta. SQLgt; seleccione el nombre de ID de Rownum de (seleccione * del orden del estudiante por nombre)

NOMBRE DE ID DE ROWNUM

Li San

Wang Er

Zhang Yi

Zhao Si

Así es como ordenar por nombre y usar rownum para marcar el número de serie correcto (de pequeño a grande)

El autor tiene una tabla con millones de registros en funcionamiento. Si la tabla necesita mostrarse en páginas en la página jsp, consideraré usar rownum. El siguiente es el método específico (por página).

barra de visualización)

Seleccione * de tabname donde rownumlt; ordenar por nombre, pero descubrí que Oracle no podía ejecutarlo según mis propios deseos. En cambio, primero tomó un registro al azar y luego lo ordenó. Después de consultar con Oracle, dijo que Rownum es de hecho lo que quiero usar. Si es así, solo puede usar subconsultas para ordenar primero y luego Rownum. El método es el siguiente

Seleccionar * de (seleccionar * de). tabname order by name) donde rownumlt; Pero esto será mucho menos eficiente

Después del experimento del autor, simplemente agregue la clave principal o el índice al orden por campo para permitir que Oracle ordene primero por campo y luego por rownum. El método permanece sin cambios

Seleccione * de tabname donde rownumlt; ordenar por nombre

Obtenga la enésima fila más grande de una columna

seleccione column_name de

(seleccione nombre_tabla * rango_denso() sobre (ordenar por descripción de columna) rango desde nombre_tabla)

 dónde rango = amp;N

 Si desea devolver el registro anterior

 select * from tablename where rownumlt;(o rownum lt;= o rownum != )

Si desea devolver el registro

seleccione * from nombre de tabla

donde…

y número de fila

menos

select * de nombre de tabla

dónde…

y rownumlt;

ordenar por nombre

Después de seleccionar los resultados, use nombre para ordenar y mostrar los resultados (seleccione primero y luego ordene)

Tenga en cuenta que solo se pueden usar los símbolos anteriores (lt; lt; = !=)

select * from tablename donde rownum != devuelve los primeros 9 registros

No se puede usar gt; gt; = = Beeen y Dado que rownum es una pseudocolumna que siempre comienza desde el principio, Oracle piensa que esta condición no es cierta y no puede encontrar el registro.

Además, este método es más rápido. /p>

seleccione * de (

seleccione rownum ra de su tabla

donde rownum lt; =

Ordenar por nombre )

donde r gt;

Saque el número de registro de esta manera (Seleccione primero, luego ordene y luego seleccione)

Ordene primero Si selecciona nuevamente, debe usar seleccionar para anida la clasificación interna. El número de fila de selección externa se genera con el conjunto de resultados y no cambiará una vez generado. Al mismo tiempo, los resultados generados son incrementales.

Sin él, nunca habrá Rownum. Es una pseudocolumna generada durante la generación del conjunto de consultas. Si la condición Rownum existe en la condición Where, entonces:

Si la condición de juicio es una constante. entonces

Solo rownum = lt; = un número natural mayor que = no hay resultado para un número mayor que uno, y no hay resultado para un número mayor que uno

Eso es decir, cuando un rownum no cumple las condiciones, la consulta finaliza. Esta es la clave de parada.

: Cuando el valor de juicio no es una constante lishixinzhi/Article/program/Oracle/201311/17923