Я хочу написать запрос, который доставит мне первые и последние 3 записи из таблицы
Ниже приведена подробная информация о таблице
select * from employee_src
Теперь, чтобы получить результат выше, я использую запрос ниже
select fname,lname,ssn,salary,dno from employee_src where rownum <=3
union all
select fname,lname,ssn,salary,dno from (select fname,lname,ssn,salary,dno from employee_src order by rownum desc) where rownum <=3
При выполнении этого запроса я получаю следующий результат
Хотя я получаю первые 3 и последние 3 строки, но последние 3 строки находятся не в том порядке, как в исходной таблице. Как это исправить.
Я могу только повторить комментарии @ GordonLinoff. Таблицы не упорядочены (данные могут быть каким-то образом упорядочены во внутреннем хранилище, но вы не должны зависеть от этого), если вы не примените к ним какой-либо порядок. Пока вы не примените порядок, первый и последний не имеют смысла. Я не могу определить заказ по вашим исходным данным, но, возможно, мне что-то не хватает.
Попробуй это.
select * from (select * from employee_src order by rownum Asc) where rownum <= 3
union all
select *, from ( select * from employee_src from dual order by rownum desc
) as employee_src_last3
where rownum <= 3
Попробуй...
Столы не имеют порядка. Они представляют собой наборы неупорядоченный. Следовательно, ваше наблюдение не имеет смысла. Если вам нужен набор результатов в определенном порядке, вам нужно добавить предложение
ORDER BY
к самому внешнемуSELECT
в запросе.