Come ottenere record casualmente dal database di Oracle?

Devo selezionare le righe casualmente. Es: supponiamo, un tavolo consta di 100 record, ma ho bisogno di ottenere solo 20 record da quei 100 record e la selezione dei record sarà in modo casuale .. come potrei uscirne? Sto usando Oracle come mio db. qualsiasi suggerimento mi sarebbe di grande aiuto. Grazie in anticipo..

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

SAMPLE () non è garantito per darti esattamente 20 righe, ma potrebbe essere adatto (e potrebbe essere significativamente migliore di una query completa + sort-by-random per tabelle di grandi dimensioni):

 SELECT * FROM table SAMPLE(20); 

Nota: il 20 qui è una percentuale approssimativa, non il numero di righe desiderato. In questo caso, dato che hai 100 righe, per ottenere circa 20 righe chiedi un campione del 20%.

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

Questo è più efficiente in quanto non ha bisogno di ordinare la tabella.

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

Per selezionare in modo casuale 20 righe, penso che sarebbe meglio selezionarne il lotto in ordine casuale e selezionare i primi 20 di quel set.

Qualcosa di simile a:

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

Ideale per i tavoli di piccole dimensioni per evitare di selezionare grandi blocchi di dati solo per scartarne la maggior parte.