Jeu de dés, hasard (Random) avec SQL
Il est facile d’obtenir aléatoirement une ligne renvoyée parmi d’autres par une base de données à l’aide d’un langage comme php, c#, java etc… mais si on veut optimiser un petit peu le processus il faut mieux le faire directement dans la requête SQL. Vous trouverez ci-dessous pour chaque moteur de base de données la syntaxe SQL correspondante pour sélectionner au hasard une ligne dans une table de base de données. Cette requête n’étant pas une requête standard normalisée (‘isofié’), il est normal que chaque moteur de bdd ai implémenté une syntaxe différente. Celle-ci est aussi plus ou moins optimisée suivant le moteur de bdd utilisé.
Vous trouverez donc dans cet article la syntaxe de sélection aléatoire pour
Attention, rappelez vous que la génération de nombre aléatoire en informatique n’est pas vraiment un nombre tiré au hasard…
SELECT column FROM table
ORDER BY RAND()
LIMIT 1
Attention cette requête n'est pas du tout optimisé avec MySQL. Un EXPLAIN sur cette requête permet de s'en rendre compte :
EXPLAIN SELECT colonne
FROM table
ORDER BY RAND( )
LIMIT 1;
Extra : Using index; Using temporary; Using filesort;
La solution sous MySQL est de rajouter une clause WHERE RAND() > 0.9.
SELECT SQL_NO_CACHE *
FROM nom_table
ORDER BY RAND( )
LIMIT 1
SELECT SQL_NO_CACHE *
FROM nom_table
WHERE RAND() > 0.9
ORDER BY RAND( )
LIMIT 1
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1
SELECT TOP 1 column FROM table
ORDER BY NEWID()
SELECT column, RAND() as IDX
FROM table
ORDER BY IDX FETCH FIRST 1 ROWS ONLY
SELECT column FROM
(SELECT column FROM table
ORDER BY dbms_random.value)
WHERE rownum = 1
Le script pour l'aléatoire avec SQLite est proche de celui utilisé pour MySQL, sauf que l'on utilise le mot entier Random.
SELECT column
FROM table
ORDER BY Random()
LIMIT 1
Si vous souhaitez ajouter d'autres exemples, d'autres requêtes et ou surtout d'autres façons de sélectionner aléatoirement une ligne avec d'autres moteurs de base de données n'hésitez pas à commenter cet article.
Merci à Pete Freitag pour les informations sur SQL qui m'ont permis d'écrire cet article :
SQL to Select a random row from a database table : http://www.petefreitag.com/item/466.cfm
Si SQL vous intéresse vous serez peut être intéressé par l'article suivant :
Comment transformer une date alphanumérique en une date de type date en SQL?
Voilà 10 ans que je n'avais pas écrit un petit texte pour souhaiter un joyeux… Read More
Cela faisait un petit moment que je n'avais pas créé de billets sur ce blog.… Read More
Explorez l'importance des user stories dans la méthode Agile à travers une vidéo humoristique qui… Read More
Parce que, contrairement à ce que l'on pourrait penser ce soir qu'il pleut des cordes,… Read More
Un peu d’humour en attendant le résultat des élections présidentielles françaises. Read More
Si vous n'avez pas accès à l'interface graphique de votre Linux, vous pouvez modifier l'horloge… Read More
View Comments