¿Cómo obtener registros al azar de la base de datos Oracle?

Necesito seleccionar filas al azar. Ej: Supongamos, una tabla consiste en 100 registros, pero necesito obtener solo 20 registros de esos 100 registros y la selección de registros será al azar … ¿cómo saldré de allí? Estoy usando Oracle como mi DB. cualquier sugerencia me ayudaría mucho. Gracias por adelantado..

SELECT * FROM ( SELECT * FROM table ORDER BY DBMS_RANDOM.VALUE) WHERE rownum < 21; 

SAMPLE () no garantiza que le proporcione exactamente 20 filas, pero puede ser adecuado (y puede tener un rendimiento significativamente mejor que una consulta completa + ordenar por azar para tablas grandes):

 SELECT * FROM table SAMPLE(20); 

Nota: el 20 aquí es un porcentaje aproximado, no el número de filas deseado. En este caso, como tiene 100 filas, para obtener aproximadamente 20 filas, solicita una muestra del 20%.

 SELECT * FROM table SAMPLE(10) WHERE ROWNUM <= 20; 

Esto es más eficiente ya que no necesita ordenar la tabla.

 SELECT column FROM ( SELECT column, dbms_random.value FROM table ORDER BY 2 ) where rownum <= 20; 

Para seleccionar al azar 20 filas, creo que sería mejor que seleccionas el lote de ellas ordenadas al azar y seleccionando las primeras 20 de ese conjunto.

Algo como:

 Select * from (select * from table order by dbms_random.value) -- you can also use DBMS_RANDOM.RANDOM where rownum < 21; 

Se usa mejor para las tablas pequeñas para evitar seleccionar grandes porciones de datos solo para descartar la mayor parte.