Ini tidak berfungsi karena:untuk baris pertama ROWNUM
adalah 1
dan, dalam hal ini, MOD(ROWNUM,2)
adalah 1
dan karena WHERE
. Anda pernyataannya adalah MOD(ROWNUM,2)=0
maka ini dikurangi menjadi 1=0
dan baris dibuang. Baris berikutnya kemudian akan diuji terhadap ROWNUM
dari 1 (karena baris sebelumnya tidak lagi dalam output dan tidak akan memiliki nomor baris), yang lagi-lagi akan gagal dalam pengujian dan dibuang. Ulangi, mual iklan dan semua baris gagal WHERE
tes dan dibuang.
Jika Anda mencoba mendapatkan baris ganjil dengan cara ini menggunakan WHERE MOD(ROWNUM,2)=1
maka itu akan mengembalikan baris pertama saja dan baris kedua, dan selanjutnya, akan gagal dalam pengujian dan tidak akan pernah disertakan dalam kueri.
Seperti yang disarankan Vijaykumar Hadalgi, Anda perlu memilih ROWNUM dalam sub-kueri (di mana ia dapat menomori semua baris tanpa klausa where untuk membatasinya) dan kemudian di kueri luar lakukan pengujian untuk membatasi baris:
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