SQL 随机返回若干行记录

SQL 随机返回若干行记录,你希望从表中获取特定数量的随机记录。修改下面的语句,以便连续执行查询并使结果集含有 5 行不同的数据。

SQL 随机返回若干行记录 问题

你希望从表中获取特定数量的随机记录。修改下面的语句,以便连续执行查询并使结果集含有 5 行不同的数据。

select ename, job
  from emp

SQL 随机返回若干行记录 解决方案

使用数据库的内置函数来随机生成查询结果。在 ORDER BY 子句里使用该内置函数可以实现查询结果的随机排序。最后要结合 SQL 限定返回行数 中的技巧从随机排序结果里获取限定数目的行。

DB2

把内置函数 RANDORDER BYFETCH 结合使用。

select ename,job
  from emp
  order by rand() fetch first 5 rows only

MySQL

把内置函数 RANDLIMITORDER BY 结合使用。

select ename,job
  from emp
  order by rand() limit 5

PostgreSQL

把内置函数 RANDOMLIMITORDER BY 结合使用。

select ename,job
  from emp
  order by random() limit 5

Oracle

在内置包 DBMS_RANDOM 里可以找到 VALUE 函数,把该内置函数和 ORDER BY、内置函数 ROWNUM 结合使用。

select *
  from (
  select ename, job
      from emp
  order by dbms_random.value()
       )
  where rownum <= 5

SQL Server

同时使用内置函数 NEWIDTOPORDER BY 来返回一个随机结果集。

select top 5 ename,job
  from emp
  order by newid()

SQL 随机返回若干行记录 扩展知识

ORDER BY 子句能够接受一个函数的返回值,并利用该值改变当前结果集的顺序。在本例中,所有查询都是在 ORDER BY 子句执行结束后才限定返回值的行数。看过 Oracle 的解决方案后,非 Oracle 用户可能会受到启发,因为 Oracle 的解决方案展示了(在理论上)其他数据库内部是如何实现该查询的。

不要误认为 ORDER BY 子句中的函数是数值常量,这一点很重要。如果 ORDER BY 子句使用数值常量,那么就需要按照 SELECT 列表里的顺序来排序。如果 ORDER BY 子句使用了函数,那么就需要按照该函数的返回值来排序,而函数返回的值是根据结果集里的每一行计算而来的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程