To nie działa, ponieważ:dla pierwszego wiersza ROWNUM to 1 i w tym przypadku MOD(ROWNUM,2) to 1 i ponieważ twój WHERE instrukcja to MOD(ROWNUM,2)=0 to zmniejsza się do 1=0 a rząd jest odrzucany. Kolejny wiersz zostanie następnie przetestowany pod kątem ROWNUM z 1 (ponieważ poprzedni wiersz nie jest już wyświetlany i nie będzie miał numeru wiersza), który ponownie nie przejdzie testu i zostanie odrzucony. Powtarzam, do znudzenia i wszystkie wiersze kończą się niepowodzeniem WHERE test i są odrzucane.
Jeśli spróbujesz uzyskać nieparzyste wiersze w ten sposób, używając WHERE MOD(ROWNUM,2)=1 wtedy zwróci tylko pierwszy wiersz, a drugi i kolejne wiersze nie przejdą testu i nigdy nie zostaną uwzględnione w zapytaniu.
Jak sugeruje Vijaykumar Hadalgi, musisz wybrać ROWNUM w podzapytaniu (gdzie może ponumerować wszystkie wiersze bez klauzuli WHERE, aby ją ograniczyć), a następnie w zapytaniu zewnętrznym wykonać test, aby ograniczyć wiersze:
SELECT ename, job
FROM (
SELECT ename,
job,
ROWNUM AS row_id -- Generate ROWNUM second.
FROM (
SELECT ename, job
FROM Emp
ORDER BY ename -- ORDER BY first.
)
)
WHERE MOD( row_id, 2 ) = 0; -- Filter third.
SQLFIDDLE