上海テンケ教育ダメンデータベーストレーニングダメンデータベースでROWNUMの使用を共有する乾物

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∈{<、<=、>、> =、=、<>}のみです。

おすすめ

転載: blog.csdn.net/qq_42726883/article/details/108463668