SQL RAND()

En SQL la fonction RAND() permet de sélectionner un nombre aléatoire à virgule, compris entre 0 et 1. Le résultat de cette fonction sera différent à chaque fois que la fonction est exécutée dans une requête SQL.

Cette fonction se révèle pratique avec un ORDER BY pour classer des résultats aléatoirement. Toutefois, même si c’est possible il faut essayer d’éviter cette méthode qui n’est pas particulièrement efficace en terme de performances.

La fonction peut aussi être utilisée dans une clause WHERE. Cela peut être pratique pour sélectionner un résultat aléatoirement.

Syntaxe

La syntaxe pour utiliser la fonction RAND() est la suivante :

SELECT RAND();

Le résultat de cette fonction sera différent à chaque fois que la requête sera exécutée. Voici une liste possible de résultats de cette fonction :

0.8702846307962059
0.0648367116831585
0.7657416637667843

Il est possible d’effectuer des opérations mathématiques avec le résultat de cette fonction. Par exemple, pour obtenir un nombre aléatoire entre 0 et 100, il suffit de multiplier le résultat de RAND() par 100, comme dans l’exemple ci-dessous:

SELECT RAND() * 100;

Résultats possibles :

60.11546427394773
51.26955569839995
15.105471494705855

Exemple

Imaginons une application qui utilise une base de données des principales villes de France. Pour le bien de ce cours, nous allons utiliser une table qui contient 10 villes françaises.

Table ville :

idvilledepartement
1ParisParis
2MarseilleBouches-du-Rhône
3LyonRhône
4ToulouseHaute-Garonne
5NiceAlpes-Maritimes
6NantesLoire-Atlantique
7StrasbourgBas-Rhin
8MontpellierHérault
9BordeauxGironde
10LilleNord

Trier les résultats aléatoirement

Il est possible de trier les résultats aléatoirement en utilisant la syntaxe suivante :

SELECT *
FROM `ville`
ORDER BY RAND()

A chaque fois que la requête sera exécutée, celle-ci retournera un résultat aléatoire. L’un des résultats possibles sera donc le suivant:

idvilledepartement
2MarseilleBouches-du-Rhône
10LilleNord
6NantesLoire-Atlantique
7StrasbourgBas-Rhin
9BordeauxGironde
1ParisParis
5NiceAlpes-Maritimes
3LyonRhône
4ToulouseHaute-Garonne
8MontpellierHérault

Sélectionner un résultat aléatoirement

En couplant cette fonction SQL avec la fonction ROUND() qui permet d’arrondir un nombre a virgule à un entier, il est possible de retourner un nombre entier plutôt qu’un nombre a virgule flottante. Ce résultat entier peut être utilisé pour sélectionner une ligne parmi un set d’enregistrement. Voici une requête SQL utilisant cette méthode:

SELECT *
FROM `ville`
WHERE `id` = ROUND( RAND() * 9 ) + 1

Voici une explication concernant cette requête :

  • RAND() * 9 permet de générer un nombre a virgule compris entre 0 et 9
  • ROUND() permet d’arrondir le nombre généré pour obtenir exclusivement des nombres entier
  • + 1 permet d’ajouter 1 au résultat précédent. Ainsi, le nombre sera compris entre 1 et 10

Cette requête va donc se baser sur un nombre entier entre 1 et 10 pour sélectionner une ville aléatoirement dans la table “ville”. L’un des résultats possibles est donc le suivant:

idvilledepartement
7StrasbourgBas-Rhin

Attention, il faut faire attention avec cette méthode qu’il n’y a pas de trou entre les identifiants sous peine de ne retourner aucun résultat.

Partager