ROWNUMは、テーブルからのクエリの行番号、または結合クエリの結果セットの行数を表すfalse列です。1、2、3、4、... Nとして割り当てられます。ここで、Nは行数です。ROWNUMを使用すると、クエリによって返される行数を制限できます。
例として、BOOKSHOPインスタンスライブラリのRESOURCESモードのEMPLOYEEテーブルを見てみましょう。
表の完全なデータは次のとおりです。
最初の5行のデータのみを表示したい場合は、次のように記述できます。
SELECT * FROM RESOURCES.EMPLOYEE WHERE rownum <6;
ROWNUM値は永続的に行に割り当てられないことに注意してください。テーブルに行のラベルはありません。ROWNUM値が5の行を照会することはできません。ROWNUM値は、割り当てられた場合にのみ増加し、初期値は1です。つまり、1つの行が満たされた後でのみ、ROWNUM値は1ずつ増加します。それ以外の場合は、元の値のみが維持されます。したがって、次のステートメントはいつでもデータを返すことはできません。
SELECT * FROM RESOURCES.EMPLOYEE WHERE ROWNUM> 6;
SELECT * FROM RESOURCES.EMPLOYEE WHERE ROWNUM = 6;
ROWNUMの重要な機能は、返される結果セットのサイズを制御することです。これにより、クエリがディスク上でソートされないようにすることができます。ROWNUM値は、クエリの述語が解析された後、並べ替えと集計の前に割り当てられるためです。したがって、並べ替えと集計でのROWNUMの使用に注意する必要があり、予期しない結果が生じる可能性があります。たとえば、最年長の5人の従業員を取得する場合などです。
SELECT * FROM RESOURCES.EMPLOYEE WHERE ROWNUM <6ORDER BY BIRTHDATE;
上記のステートメントは、BIRTHDATEソートでEMPLOYEEテーブルの最初の5行のみを出力し、テーブル内のすべてのデータがBIRTHDATEでソートされ、最初の5行を出力するわけではありません。後者を実現するには、次のステートメントを使用する必要があります。
SELECT * FROM(SELECT * FROM RESOURCES.EMPLOYEE ORDER BY BIRTHDATE)WHERE ROWNUM <6;
または、SELECT TOP 5 * FROM RESOURCES.EMPLOYEE ORDER BY BIRTHDATE;
結果は次のとおりです。
ROWNUMの使用に関しては、次の制限にも注意する必要があります。
1.1。クエリでは、ROWNUMを任意の数値式と比較して操作できますが、ORを含むブール式に表示することはできません。そうしないと、エラーが報告されます。
2.2。ROWNUMは、相関のないサブクエリにのみ表示でき、関連するサブクエリでは使用できません。そうしないと、エラーが報告されます。
3.3。相関のないサブクエリでは、ROWNUMはTOPと同じ機能しか実行できないため、サブクエリにORDERBYとGROUPBYを含めることはできません。
4.4。ROWNUMが配置されているサブ述語は、次の形式のみを持つことができます:ROWNUM op exp、expのタイプは、即値、パラメーター、および変数値、op∈{<、<=、>、> =、=、<>}のみです。