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