sql >> Database >  >> RDS >> Oracle

Oracle/SQL:waarom vraagt ​​​​query SELECT * FROM records WHERE rownum>=5 AND rownum <=10 - retourneert nul rijen

In Oracle worden Rownum-waarden toegewezen na de filterfase van de query - het zijn geen rijen van de tabel, het zijn rijen van de queryresultatenset.

Dus de eerste rij die terugkomt, krijgt altijd rijnummer 1, de tweede rij die terugkomt, rijnummer 2, enz.

De rownum-waarde wordt alleen verhoogd nadat deze is toegewezen, dus elke zoekopdracht zoals

select * from t where ROWNUM > 1

zal nooit eventuele resultaten retourneren. Deze zoekopdracht zegt 'Ik wil de eerste rij die naar mij wordt teruggestuurd niet zien, alleen de rijen daarna', wat nogal een paradox is, dus er wordt niets geretourneerd.

Zie Ask Tom:On ROWNUM en Limiting Results voor meer details.



  1. Matrix voor door SQL Server ondersteunde versies

  2. Wijzig het scheidingsteken in een komma in SQLite-queryresultaten

  3. LINQ naar SQL meerdere tabellen left outer join

  4. JDBC ResultSet krijg kolommen met tabelalias