Я думаю, что ответ в основном зависит от СУБД, с которой вы работаете.
В Oracle приведенный ниже запрос, хотя и неэффективный, должен работать
select * from
(select * , rownum as order from guest order by id asc ) b
where b.order = 4
UNION
select * from
(select * , rownum as order from guest order by id asc ) b
where b.order = 3
UNION
select * from
(select * , rownum as order from guest order by id asc ) b
where b.order = 5
Не уверен, что что-то изс простым запросом можно добиться большей эффективности, я бы использовал приведенное выше только для монстра, и только если запрашиваемая таблица очень мала.
У вас также есть другой вариант, если таблица большая и вам нужно только извлечьпервые строки.В случае, который вы описали, я бы извлек первые 5 строк, а затем программно извлек бы строки в позиции 4,3,5.
вы можете извлечь первые 5 строк с помощью этого запроса в oracle
select * from guest order by id asc where rownum < 6