SQL ORDER BY 随机排序
如果您想要结果记录 随机排序 ,您应该根据不同的数据库使用以下代码。
这里有一个问题:从数据库中获取随机记录或行的需要是什么?
有时您可能想要显示随机信息,例如 文章、链接、页面 等供用户查看。
如果您想要从任何数据库中获取随机行,则必须根据不同的数据库使用一些修改过的查询。
- 使用 MySQL 选择随机行:
如果您想要返回一个随机行,请使用以下语法:
SELECT column FROM table ORDER BY RAND () LIMIT 1;
- 选择Postgre SQL中的随机行:
SELECT column FROM table ORDER BY RANDOM () LIMIT 1;
- 选择一个随机行:
SELECT TOP 1 column FROM table ORDER BY NEWID ();
- 选择一行随机数据(Oracle):
SELECT column FROM (SELECT column FROM table ORDER BY dbms_random.value) WHERE rownum = 1;
- 选择IBM DB2中的随机行:
SELECT column RAND () as IDX FROM table ORDER BY IDX FETCH FIRST 1 ROWS ONLY;
为了实际理解这个概念,让我们通过使用MySQL数据库的一些示例来看一下。假设我们在数据库中创建了一个名为items的表,其中包含以下数据:
表:items
ID | Item_Name | Item_Quantity | Item_Price | Purchase_Date |
---|---|---|---|---|
1 | Soap | 5 | 200 2021-07-08 | |
2 | Toothpaste | 2 | 80 | 2021-07-10 |
3 | Pen | 10 | 50 | 2021-07-12 |
4 | Bottle | 1 | 250 | 2021-07-13 |
5 | Brush | 3 | 90 | 2021-07-15 |
假设我们想从items表中检索任意随机记录。
我们将查询书写如下:
mysql> SELECT * FROM items ORDER BY RAND () LIMIT 1;
我们可能会得到以下结果:
ID | Item_Name | Item_Quantity | Item_Price | Purchase_Date |
---|---|---|---|---|
3 | Pen | 10 | 20 | 2021-07-12 |
现在让我们尝试再次执行相同的查询。
mysql> SELECT * FROM items ORDER BY RAND () LIMIT 1;
我们可能会得到以下结果:
ID | Item_Name | Item_Quantity | Item_Price | Purchase_Date |
---|---|---|---|---|
5 | Brush | 3 | 90 | 2021-07-15 |
从上述结果中,我们可以得出结论,尽管我们两次执行相同的查询,但我们得到的输出结果仍然不同。RAND()函数从同一张表中为同一查询两次选取了不同的记录。因此,即使我们再次执行相同的查询,每次都会得到不同的输出结果。使用RAND()函数连续获取相同记录的可能性很小。
现在,假设您希望随机获取表中的所有记录。
为此,我们需要执行以下查询:
mysql> SELECT * FROM items ORDER BY RAND ();
我们可能会得到以下结果:
ID | Item_Name | Item_Quantity | Item_Price | Purchase_Date |
---|---|---|---|---|
4 | Bottle | 1 | 250 | 2021-07-13 |
5 | Brush | 3 | 90 | 2021-07-15 |
1 | Soap | 5 | 200 | 2021-07-08 |
2 | Toothpaste | 2 | 80 | 2021-07-10 |
3 | Pen | 10 | 50 | 2021-07-12 |
还有一种可能性,如果我们在员工表上再次执行RAND()函数,可以获得一些不同的记录排列。