dポイントプレゼントキャンペーン実施中!

oracleのsql文の取得制限でrownumがありますがrownumは何順でデータを取得するのでしょうか

A 回答 (4件)

ヒットした順です。

ただし、WHERE 句で指定するため、適用される
のは ORDER BY 句や GROUP BY 句を適用する前です。

全表走査の場合はブロックの先頭から検索されるのでその順という
ことになるでしょうが、結合がある場合は実行計画により内部的に
ソートされたり、順不定になるものもあるので、一概には言えませ
ん。
    • good
    • 0

>order_by_clauseを指定しない場合、同じ問合せで取り出される行の順序が異なることがあります。


とリファレンスにもあるように、順序は不定です。
ソートした結果のうち、N行を取得したいというような場合はNo.2さんが記載されているSQLでいいです。

http://download.oracle.com/docs/cd/E16338_01/ser …
    • good
    • 0

睡眠不足で間違えたので、訂正します。


----------------------------------
何順でもありません。

SELECT * FROM ATABLE WHERE rownum <= 10 ORDER BY AFIELD

とやると、一見 AFIELD 順に 10 件抽出しそうに見えますが、
実は、10 件抽出してからその結果を並べ替えます。

AFIELD 順に 10 件抽出したい場合は、

SELECT B.* FROM (
SELECT * FROM ATABLE ORDER BY AFIELD
) AS B WHERE rownum <= 10

とやる必要があります。
    • good
    • 0

何順でもありません。



SELECT * FROM ATABLE WHERE rownum <= 10 ORDER BY AFIELD

とやると、一見 AFIELD 順に 10 件抽出しそうに見えますが、
実は、10 件抽出してからその結果を並べ替えます。

AFIELD 順に 10 件抽出したい場合は、

SELECT B.* FROM (
SELECT ATABLE.*, rownum AS Num FROM ATABLE ORDER BY AFIELD
) AS B WHERE B.Num <= 10

とやる必要があります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!