Home > Ask the Oracle Database / Applications Experts > Questions & Answers > FIRST N rows, TOP N rows, LAST N rows, BOTTOM N rows...
Ask The Oracle Expert: Questions & Answers
EMAIL THIS

FIRST N rows, TOP N rows, LAST N rows, BOTTOM N rows...

Rudy Limeback EXPERT RESPONSE FROM: Rudy Limeback

Pose a Question
Other Oracle Categories
Meet all Oracle Experts
Become an Expert for this site
>
QUESTION POSED ON: 25 November 2002

Question 1:

I'm using MS access 2000 to write a small app for a friend. I need to display the first 'X' number of rows in a query based on a number the users enters. Can you help?

Question 2:

Is there a way to restrict the number of rows that are returned from a select query? My select query comes back with 30,000 rows, and I just want the first 300. Please let me know if (and how) this is possible.

Question 3:

How can I retrieve only a specific number of LAST FEW records from the database using SQL? For example I have 2000 records in the database. I need to get only 100 records from the bottom of the database based on specific field.



Digg This!    StumbleUpon Toolbar StumbleUpon    Bookmark with Delicious Del.icio.us   


RELATED RESOURCES
2020software.com, trial software downloads for accounting software, ERP software, CRM software and business software systems
Search Bitpipe.com for the latest white papers and business webcasts
Whatis.com, the online computer dictionary


This type of question gets asked all the time. Perhaps if we answer it again, using "FIRST N rows, TOP N rows, LAST N rows, BOTTOM N rows..." to describe the problem, it will be easier to find when you search the site.

First, we must establish one important fact:

There is no order in a relational table! There is no first row, or last row. Rows are stored in no particular sequence, so if you want the first ten, or the last ten, the question only makes sense if you phrase it in terms of the values of a particular column.

That having been said, it is indeed possible for a table to have a sequence, but only if a clustering index has been defined, so that the rows are stored by the value of the index column, most of the time (physical sequence is not guaranteed, but logical sequence is). If you want a result set in a specific sequence, you are nevertheless still urged to rely on the ORDER BY clause.

Okay, to business.

If you are using Microsoft SQL Server or Access, use the TOP keyword and an ORDER BY clause, like this --

select top 10
       foo
     , bar
  from yourtable 
order 
    by foo desc

In this example, you will get the rows that have the highest ten foo values, because the ORDER BY sorts the rows into descending sequence, so the highest come first. If you want the bottom ten instead, don't code BOTTOM instead of TOP (because there's no such keyword as BOTTOM), just use ASC instead of DESC in the ORDER BY.

If you are using MySQL or PostgreSQL, use the LIMIT keyword and an ORDER BY clause, like this --

select foo
     , bar
  from yourtable 
order 
    by foo desc
 limit 10

Again, if you want the bottom ten, use ASC in the ORDER BY.

If you are using DB2, use the FETCH FIRST clause, as explained in Last N rows in DB2 (3 October 2002).

If you are using Oracle, you can use a special trick to get row numbers --

select * 
  from ( select foo
              , bar
           from yourtable 
         order 
             by foo desc )
 where rownum <= 10

Finally, if you are using none of the above, try the generic top 10 query:

select foo
     , bar
  from yourtable X 
 where ( select count(*) 
           from yourtable  
          where foo > X.foo ) < 10

You will notice that there is no ORDER BY clause. Nevertheless, sequencing on the foo column is assumed, as you can see in the subquery. The subquery counts the number of rows that have a foo value that is greater than the one under consideration in the outer query; if that count is less than ten, then the row under consideration must be in the top ten. To get the bottom ten, reverse the inequality in the subquery.




Search and Browse the Expert Answer Center
Search and browse more than 25,000 question and answer pairs from more than 250 TechTarget industry experts.
Browse our Expert Advice



Oracle White Papers: Fusion Middleware
HomeNewsTopicsTipsAsk the ExpertsMultimediaWhite PapersProductsBlogs
About Us  |  Contact Us  |  For Advertisers  |  For Business Partners  |  Site Index  |  RSS
SEARCH 
TechTarget provides technology professionals with the information they need to perform their jobs - from developing strategy, to making cost-effective purchase decisions and managing their organizations' technology projects - with its network of technology-specific websites, events and online magazines.

TechTarget Corporate Web Site  |  Media Kits  |  Site Map




All Rights Reserved, Copyright 2003 - 2009, TechTarget | Read our Privacy Policy
  TechTarget - The IT Media ROI Experts