Достаточно несложно, однако есть нюансы.
SELECT MAX(id) FROM random тупо добывает максимальный id в таблице (обозначу его как $max).
RAND() * $max дает нам некий произвольный ID из таблицы.
Сложная скобочная конструкция, с которой джойнится таблица random создает временную таблицу, в которой, грубо говоря, лежит заданное кол-во произвольно выбранных (при помощи rand() * $max) ID.
Условие вида r1.id >= r2.id позволяет учесть потенциальные пропуски в ID (какие-то из записей были удалены, к примеру).
Теперь нюансы:
1. Я не уверен, что все БД схавают джойн по нецелому ID. Возможно, имело бы смысл сначала округлить.
2. На первый взгляд, нет контроля за дубликатами.