HOW TO SELECT FIRST 5 RECORDS FROM A TABLE?
This question, often asked in many interviews, does
not make any sense to me. The problem here is how do you define which record is
first and which is second. Which record is retrieved first from the database is
not deterministic. It depends on many uncontrollable factors such as how
database works at that moment of execution etc. So the question should really
be – “how to select any 5 records from the table?” But whatever it is, here is
the solution:
In Oracle,
SELECT *
FROM EMP
WHERE ROWNUM <= 5;
In SQL Server,
SELECT TOP 5 * FROM EMP;
Generic solution,
I believe a generic solution can be devised for this problem if and only
if there exists at least one distinct column in the table. For example, in our
EMP table ID is distinct. We can use that distinct column in the below way to
come up with a generic solution of this question that does not require database
specific functions such as ROWNUM, TOP etc.
SELECT name
FROM EMPLOYEE o
WHERE (SELECT count(*) FROM EMPLOYEE
i WHERE i.name < o.name) < 5
Name
|
Inno
|
Anno
|
Darl
|
Meme
|
Bhuti
|
I have taken “name” column in the above example since “name” is happened
to be unique in this table. I could very well take ID column as well.
In this example, if the chosen column was not distinct, we would have
got more than 5 records returned in our output.
Do you have a better solution to this problem? If yes, post your
solution in the comment.
No comments:
Post a Comment