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 p>
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
p>
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… p>
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