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 estudiantes( 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 es todo 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 (número natural de n>)

SQL> seleccione el nombre de identificación de Rownum del estudiante donde rownum= ; (se puede utilizar para limitar el número de registros devueltos para garantizar que no haya errores, como cursores implícitos)

SQL> seleccione el nombre de identificación de rownum del estudiante donde rownum=

NOMBRE DE ID DE ROWNUM

Zhang Yi

 SQL> seleccione el nombre de ID de Rownum del estudiante donde Rownum =

NOMBRE DE ID DE ROWNUM

Zhang Yi

 SQL> p>

 

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

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

SQL> seleccione el nombre de ID de Rownum del estudiante donde Rownum >

NOMBRE DE ID DE ROWNUM

Entonces, ¿cómo podemos encontrar los registros después de la segunda fila? Puede utilizar 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 pertenece a una determinada tabla. tiene un alias, es imposible saber si rownum es una columna de la subconsulta o de la consulta principal

SQL>select * from (select rownum no id name from Student) donde no>

;

SIN NOMBRE DE ID

Li San

Zhao Si

SQL> seleccione * de (seleccione el nombre de ID de Rownum del estudiante) donde

NOMBRE DE ID de ROWNUM

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

Si desea encontrar el registro antes del tercer registro, puede obtener dos registros usando rownum<. Obviamente, rownum es un número natural para rownum<. n ((n> ) la condición se considera verdadera, por lo que se puede encontrar el registro

SQL> seleccione el nombre de ID de Rownum del estudiante donde Rownum <;

NOMBRE DE ID DE ROWNUM

 

Zhang Yi

Wang Er

En resumen, en las situaciones anteriores, a veces puede ser necesario consultar los datos de rownum en un cierto intervalo ¿Qué debemos hacer? De lo anterior, podemos ver que Rownum es menor que La condición de consulta de un determinado valor es artificialmente verdadera para las condiciones de consulta mayores que un determinado valor, se considera directamente falsa, pero se puede convertir indirectamente para que se considere verdadero. Entonces se debe utilizar una subconsulta. Por ejemplo, si desea consultar el número de fila en la segunda fila a la primera. Los datos entre las tres filas incluyen la segunda y tercera filas de datos. Solo podemos escribir la siguiente declaración para devolver primero filas que sean menores o iguales a tres, y luego determinar en la consulta principal las filas cuya columna de alias del nuevo número de fila es mayor o igual a dos. Sin embargo, tales operaciones afectarán. la velocidad en conjuntos de datos grandes

SQL> select * from (select rownum no id name from Student donde rownum<= ) donde no >=

NO ID NAME

;

 

Wang Er

Li San

( )rownum y clasificación

Rownum en Oracle Es el número de serie generado cuando obteniendo datos, por lo que si desea especificar los datos de fila de Rowmun para los datos ordenados especificados, debe prestarle atención

SQL> seleccione el nombre de ID de Rownum del orden del estudiante por nombre

< p; >NOMBRE ID ROWNNUM

Li San

Wang Er

Zhang Yi

Zhao Si

Se puede ver que rownum no es un número de serie generado en función de la columna de nombre. El sistema clasifica los registros según el orden en que se insertan. se debe utilizar la subconsulta

SQL> seleccione el nombre de ID de Rownum de (seleccione * del orden del estudiante por nombre

NOMBRE DE ID de ROWNUM

<); p> Li San

Wang Er

Zhang Yi

Zhao Si

De esta manera, se convierte en ordenar por nombre y usar rownum para marcar el número de serie correcto (de pequeño a grande)

En el trabajo, el autor tiene una tabla con millones de registros en la página jsp, la tabla debe mostrarse en paginación, así que considero usarla. rownum. El siguiente es el método específico (por página

Mostrar barras)

Seleccionar * de tabname donde rownum< ordenar por nombre, pero descubrí que Oracle no podía ejecutarlo de acuerdo con mis propios deseos. En cambio, buscó aleatoriamente un registro y luego

Después de ordenar, consulté a Oracle y dije que Rownum es realmente lo que quiero usar. Si quiero usarlo, solo puedo usar una subconsulta para ordenar primero y luego Rownum. El método es el siguiente. > seleccionar * de (seleccionar * de tabname ordenar por nombre) donde rownum< Pero de esta manera, la eficiencia será mucho menor

Después del experimento del autor, solo necesito agregar la clave principal o el índice a el orden por campo para permitir que Oracle ordene por campo primero y luego por número de fila. El método permanece sin cambios

 select * from tabname donde filanum

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

 seleccione nombre_columna de

 (seleccione nombre_tabla * rango_denso() sobre (ordenar por columna desc) rango desde nombre_tabla)

donde rango = &N

Si desea devolver el registro anterior

seleccione * de nombre de tabla donde rownum < ;(o rownum <= o rownum != )

Si desea devolver el registro

select * from tablename

donde…

 y rownum<

menos

select * from nombre de tabla

donde...

y número de fila<

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 (< <= !=)

seleccione * de nombre de tabla donde número de fila != ;devuelve los primeros 9 registros

no se pueden usar> >= = Beeen y Dado que rownum es una pseudocolumna que siempre comienza desde el principio, Oracle piensa que si no se establece la condición, no se puede encontrar ningún registro

Además, este método es más rápido

select * from (

select rownum r a from yourtable

where rownum <=

Ordenar por nombre )

donde r >

¡Saca el número de registro así (Selecciona primero, luego ordena y luego selecciona)

Si quieres! para ordenar primero y luego seleccionar, debe usar select para anidar la clasificación interna y la selección externa se genera con el conjunto de resultados y no cambiará una vez generado. Al mismo tiempo, los resultados generados son incrementales en secuencia. Sin él, nunca habrá rownum. Sí Pseudocolumnas generadas durante el proceso de generación de la colección de consultas y si hay una condición de rownum en la condición donde:

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

Solo rownum = <= es mayor que Números naturales = Los números mayores que 1 no tienen resultados. Los números mayores que 1 no tienen resultados.

Es decir, cuando un rownum no cumple las condiciones. la consulta finaliza. ¡Esta es la tecla de parada!

: Cuándo Cuando el valor del juicio no es una constante lishixinzhi/Article/program/Orac

le/201311/17923