为了获得表格内容的随机“排列”,一个选项是:
ORDER BY RAND()
我的问题是在这种情况下这是如何工作的?它要求RAND()
用作“比较器”?RAND
不拿任何论据来比较不重要吗?
为了获得表格内容的随机“排列”,一个选项是:
ORDER BY RAND()
我的问题是在这种情况下这是如何工作的?它要求RAND()
用作“比较器”?RAND
不拿任何论据来比较不重要吗?
返回 0 <= v < 1.0 范围内的随机浮点值 v。
你可以提供一个可选的seeding value
在执行时,这被视为virtual column
with random numbers
。然后SQL engine
将此列用于sort
表内容,将其(动态列)视为任何普通列(具有浮点值)
MySQL 中的rand()
函数每次调用时都会返回一个随机值。
当这个过程发生时,排序例程读取一条记录,调用 rand 函数,并隐式地将一个具有随机值的列添加到记录中。此列是隐藏的——您永远看不到它,但它用于排序。
从逻辑上讲,这相当于:
select <columns in t>
from (select t.*, rand() as ordering
from t
) t
order by ordering
RAND()
返回随机浮点数,因此使用标准浮点数比较来比较这些值。就像您在表架构中有一个浮点数列并在ORDER BY
语句中使用它。这里没有魔法。