Content Entry

1.10 随机返回 n 条记录

Published: 2008-11-13 Categories: Cookbook Tags: SQL DB2 MySQL Oracle PostgreSQL Database MSSQL RAND RANDOM dbms_random newid

Q: 从表中随机返回 n 条记录,每次执行返回不同的结果集
A: 使用DBMS内置函数生成随机数值,在 ORDER BY 中使用该函数随机排序

DB2 ( 使用 RAND 内置函数 )
SELECT ename, job
FROM emp
ORDER BY rand() FETCH FIRST 5 ROWS ONLY

MySQL ( 使用 RAND 内置函数 )
SELECT ename, job
FROM emp
ORDER BY rand() LIMIT 5

PostgreSQL ( random() )
SELECT ename, job
FROM emp
ORDER BY random() LIMIT 5

Oracle ( 使用 DBMS_RANDOM 包中的内置函数 VALUE )
SELECT *
FROM (
SELECT ename, job
FROM emp
ORDER BY dbms_random.value()
)
WHERE ROWNUM <= 5

SQL Server ( newid() )
SELECT top 5 ename, job
FROM emp
ORDER BY newid()

PS: 在 ORDER BY 子句中指定数字常量时,是要求根据 SELECT 列表中相应位置的列来排序,在 ORDER BY 子句中使用函数时,则按函数在每一行计算结果排序

Tables Used:
for MySQL
http://www.hooto.com/home/rui/doc/archives/5089.html
for PostgreSQL
http://www.hooto.com/home/rui/doc/archives/5090.html

Learn:
SQL Cookbook, by Anthony Molinaro.
Copyright 2006 O'Reilly Media, Inc.

--EOF--

comments loading