Jak działa RANDOM w języku SQL? Przykłady zastosowania

Jak działa RANDOM w języku SQL? Przykłady zastosowania

Jednym z częstych zadań w bazach danych jest losowanie rekordów. Czy to do prezentowania losowych artykułów, wyboru użytkownika w konkursie czy testowania baz danych. W SQL losowość osiągamy dzięki funkcji RANDOM (lub jej odpowiednikom w różnych systemach bazodanowych). Dzisiaj przyjrzymy się, jak działa RANDOM w języku SQL i zaprezentujemy kilka praktycznych zastosowań.

Funkcja RANDOM w SQL – jak działa?

Funkcja RANDOM() zwraca liczbę, która jest losowa. W zależności od bazy danych jej implementacja może się różnić:

  • W PostgreSQL funkcja RANDOM() zwraca liczbę zmiennoprzecinkową z zakresu 0 <= x < 1.
  • W SQLite funkcja RANDOM() zwraca losową liczbę całkowitą w zakresie od -9223372036854775808 do 9223372036854775807.
  • W MySQL i MariaDB odpowiednikiem jest funkcja RAND(), która działa podobnie do PostgreSQL.
  • W SQL Server losowość generuje się za pomocą NEWID() lub RAND() (ale uwaga na różnice w działaniu).

Losowanie rekordów z tabeli

A więc jak w praktyce możemy losować rekordy? Spójrzmy na najczęstszy przypadek – wybór losowego wiersza:

SELECT * FROM produkty ORDER BY RANDOM() LIMIT 1;

Ta składnia świetnie sprawdza się w PostgreSQL czy SQLite. W innych bazach możesz użyć:

  • MySQL / MariaDB: ORDER BY RAND()
  • SQL Server: NEWID()
SELECT TOP 1 * FROM produkty ORDER BY NEWID();

Losowanie wielu rekordów

Załóżmy, że chcemy wylosować pięć różnych produktów:

SELECT * FROM produkty ORDER BY RANDOM() LIMIT 5;

Lub w MySQL:

SELECT * FROM produkty ORDER BY RAND() LIMIT 5;

Losowanie liczby w określonym zakresie

SQL umożliwia również losowanie liczb w zadanym zakresie:

SELECT FLOOR(RANDOM() * 100) AS liczba;

Powyższe zapytanie w PostgreSQL zwróci losową liczbę całkowitą od 0 do 99.

W MySQL używamy:

SELECT FLOOR(RAND() * 100) AS liczba;

Wydajność losowego sortowania

Użycie ORDER BY RANDOM() na dużych tabelach może być kosztowne, ponieważ wymusza ono przetasowanie całej tabeli przed zwróceniem wyników. Istnieją bardziej wydajne sposoby losowania, np. poprzez:

  1. Losowanie na podstawie unikalnego ID.
  2. Losowanie na podstawie liczby rekordów w tabeli.

Przykłady alternatywnych metod losowania

Jeśli tabela posiada kolumnę id (np. klucz główny, który jest liczbą całkowitą i rośnie sekwencyjnie), możemy użyć:

SELECT * FROM produkty WHERE id = (SELECT FLOOR(RANDOM() * (SELECT MAX(id) FROM produkty) + 1));

W MySQL:

SELECT * FROM produkty WHERE id = (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM produkty) + 1));

Podsumowanie

Funkcja RANDOM (lub jej odpowiedniki, jak RAND czy NEWID) to potężne narzędzie do losowania danych w SQL. Kluczowe wnioski:

  • W PostgreSQL i SQLite używamy RANDOM(), a w MySQL – RAND().
  • Losowanie pojedynczego rekordu wymaga użycia ORDER BY RANDOM(), ale można to zoptymalizować.
  • Skalowanie losowania na dużych zbiorach danych może wymagać alternatywnych metod – opartych na ID lub podzapytań.

Tabela podsumowująca różnice w RANDOM w różnych bazach danych:

Baza danych Losowa funkcja Zakres wartości
PostgreSQL RANDOM() 0 ≤ x < 1
MySQL RAND() 0 ≤ x < 1
SQLite RANDOM() -9223372036854775808 do 9223372036854775807
SQL Server NEWID() Unikalne identyfikatory

 

Inny ciekawy artykuł:

Jak działa EXP w języku SQL? Przykłady zastosowania

KajoDataSpace