Если вам необходимо получить «все строки, кроме верхней 3 и нижней 3», независимо от количества строк в таблице, вы можете использовать это:
select * from (
select emp.*,
row_number() over (order by id) n,
count(*) over () c
from emp)
where n between 4 and c - 4;
Если ваше требованиечтобы получить «все строки, кроме верхних 20% и нижних 20%», вы можете использовать это:
select * from (
select emp.*,
ntile(5) over (order by id) n,
count(*) over () c
from emp)
where n between 2 and 4;