次の 2 つの SQL ステートメントのうち、目的の結果セット(つまり、Status=0 で StartTimes が最も高い 10 行) を返すのはどれですか?
両方のステートメントは常に同じ結果セットを返しますか (StartTime は一意です)?
SELECT *
FROM MyTable
WHERE Status=0
AND ROWNUM <= 10
ORDER BY StartTime DESC
SELECT *
FROM (
SELECT *
FROM MyTable
WHERE Status=0
ORDER BY StartTime DESC
)
WHERE ROWNUM <= 10
バックグラウンド
私の DBAdmin は、最初のステートメントは最初にテーブルを 10 行に制限し、それらのランダムな行を StartTime で並べ替えると言っていましたが、これは明らかに私が望んでいるものではありません。その回答で学んだことから、2番目のステートメントの order by 句は冗長であり、オプティマイザーによって削除される可能性がありますが、これも私が望んでいるものではありません。
SQLite データベースへのクエリの句に関して同様の質問をしましたが、Oracle データベースで使用されるlimit
上記のステートメント ( limit
Vsを使用rownum
) との違いを理解することに興味があります。