MySQL 选择随机记录
有时我们想从数据库表中获取随机记录。 例如 ,我们的表中存储了几个名言,需要在GUI上显示随机名言。在这种情况下,我们将编写一个SQL查询从表中获取随机记录。在本节中,我们将看到如何从表中选择一条随机记录。
真实世界的例子:
- 在线考试,我们将显示一个随机问题。
- 在电子商务网站的主页上显示随机特色商品。
- 从图库中随机显示图片,并将其用作特色图片。
MySQL 没有提供任何内置语句来返回数据库表中的随机行。我们可以借助一个 ** RAND()函数 ** 来实现这一点。
语法
以下是从数据库表中选择随机记录的语法:
SELECT * FROM table_name
ORDER BY RAND()
LIMIT N;
让我们详细了解语句的参数:
- 首先,我们指定了要选择随机记录的表名。
- 其次,我们指定了返回表中每一行随机值的 RAND() 函数。
- 第三,我们指定了一个 ORDER BY 子句,该子句根据 RAND() 函数生成的随机数对所有表行进行排序。
- 最后,我们指定了一个 LIMIT 子句,该子句从数据库表中选择N个随机记录。
示例
让我们通过一个示例来理解如何从数据库表中生成随机记录。首先,我们将使用以下语句创建一个名为“students”的表:
mysql> CREATE TABLE students(
id int NOT NULL AUTO_INCREMENT,
name varchar(45) NOT NULL,
class int NOT NULL,
email_id varchar(65) NOT NULL,
PRIMARY KEY (id)
);
接下来,我们将使用 INSERT 语句将记录填入此表中,如下所示:
INSERT INTO students (name, class, email_id)
VALUES ('Stephen', 6, 'stephen@javatpoint.com'),
('Bob', 7, 'bob@javatpoint.com'),
('Steven', 8, 'steven@javatpoint.com'),
('Donald', 6, 'donald@javatpoint.com'),
('Jenifer', 9, 'jenifer@javatpoint.com'),
('Peter', 9, 'peter@javatpoint.com'),
('Alexandar', 7, 'alexandar@javatpoint.com');
接下来,我们将使用以下查询显示表中的所有记录:
mysql> SELECT * FROM students;
现在,我们将执行下面的查询来从表中选择随机记录。假设我们想要从表中选择 五个随机记录 ,我们将查询数据如下:
mysql> SELECT id, name, email_id FROM students
ORDER BY RAND() LIMIT 5;
它返回以下输出:
如果我们再次运行上面的查询,我们将得到以下输出:
注意:我们使用RAND()函数时,每次都会返回不同的结果,因为它是随机的。 因此,这种技术只在小表中有效。对于大表来说,会很慢。这是因为MySQL首先对整个表进行排序,然后再返回随机的记录。
查询速度还取决于表中可用的行数。因此,如果我们的表有更多行,生成每行的随机记录就需要更长的时间。