• ベストアンサー

sqlについて

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

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.4

ヒットした順です。ただし、WHERE 句で指定するため、適用される のは ORDER BY 句や GROUP BY 句を適用する前です。 全表走査の場合はブロックの先頭から検索されるのでその順という ことになるでしょうが、結合がある場合は実行計画により内部的に ソートされたり、順不定になるものもあるので、一概には言えませ ん。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.3

>order_by_clauseを指定しない場合、同じ問合せで取り出される行の順序が異なることがあります。 とリファレンスにもあるように、順序は不定です。 ソートした結果のうち、N行を取得したいというような場合はNo.2さんが記載されているSQLでいいです。 http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/statements_10002.htm#i2171079

すると、全ての回答が全文表示されます。
  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.2

睡眠不足で間違えたので、訂正します。 ---------------------------------- 何順でもありません。 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 とやる必要があります。

すると、全ての回答が全文表示されます。
  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.1

何順でもありません。 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 とやる必要があります。

すると、全ての回答が全文表示されます。

関連するQ&A