DB

TOP N

_침묵_ 2009. 2. 13. 10:34
참조 : http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=article&wr_id=32831

SQL Server
SELECT TOP 3
FROM TableName 
ORDER BY ColumnName DESC

DB2
SELECT * 
FROM TableName 
ORDER BY ColumnName DESC
FETCH FIRST 3 ROWS ONLY

Oracle
SELECT * 
( SELECT *
  FROM TableName 
  ORDER BY ColumnName DESC )
WHERE ROWNUM <= 3

Oracle의 경우에는 rownum을 이용하는 방법을 사용한다. 그러나 rownum이라는 로우가 Fetch된 후 순번이 부여되는 가상(pusedo) 컬럼으로 실행 순서가 order by보다 앞서서 Fetch된 후 부여되기 때문에 rownum + order by를 같이 쓰게 될 때 원하는 순서가 틀어지게 된다. 따라서 인라인 뷰로 묶어서 먼저 정렬시킨 후에 외부에서 rownum을 부여해야 정확한 순서를 나타낼 수 있다. 비효율적으로 보이지만 앞선 두 개의 데이터베이스와 같이 버퍼를 사용하는 기본 Fetch 원리와 성능은 동일하다.


'DB' 카테고리의 다른 글

INDEX를 사용하지 못하는 경우  (0) 2009.05.12
Fedora Core 5에서 오라클 10g Release 2 설치  (0) 2006.06.30
DB별 JDBC 세팅  (0) 2006.04.04