ROWNUM疑似列は、クエリ結果の各行に番号を付けます。その値は、クエリ結果セット内でのその行の具体的な位置です。たとえば、1行目には1が返され、2行目には2が返され、それ以降も同様に続きます。本記事では主にROWNUM疑似列の使用方法について説明します。
ROWNUM は、返される行数を制限できます。次の例のように、employees テーブルから5件のデータを返します:
SELECT * FROM employees WHERE rownum <=5;
ROWNUM を使用する際には、以下の点に注意する必要があります:
ROWNUMの後にORDER BY句がある場合、WHERE条件を満たす結果が再ソートされます。ORDER BY句をサブクエリに埋め込み、ROWNUM疑似列を条件としてトップレベルのクエリに配置することで、ROWNUM条件を行のソート後に強制的に実行させることができます。次の例のように、年齢が最も高い5人の従業員情報を照会する場合、次のSQLステートメントを使用してクエリ結果の最初の5人の従業員情報の年齢順に並べ替えるだけです:SELECT * FROM employees WHERE rownum <=5 ORDER BY age DESC;正しいクエリステートメントは次のとおりです:
SELECT * FROM (SELECT * FROM employees ORDER BY age DESC) WHERE rownum <= 5;WHERE句でROWNUMが任意の正の整数より大きいと指定した場合、常にFALSEが返されます。次の例のSQLステートメントは、いかなる情報も返しません:SELECT * FROM employees WHERE rownum > 1;これは、テーブルの最初の行の結果を取得する際、その行の
ROWNUM疑似列の値が1に設定されるためです。この時点でWHERE条件の判断により結果がFALSEとなるため、この行は除外されます。次の行の結果を取得する際、その行のROWNUM疑似列の値は依然として1に設定され、WHERE条件の判断結果は依然としてFALSEであるため、この行も再度除外されます。これを繰り返すことで、すべての行が条件を満たさないため、データは一切返されません。
UPDATE ステートメントを使用して、テーブルの特定の列に ROWNUM 値を代入できます。たとえば:
UPDATE employees SET id = rownum;
このステートメントは、テーブル employees の id 列に ROWNUM 値を代入します。つまり、id 列に1、2、…と順番に値を代入し、そのテーブルの総行数まで続けます。
注意
クエリで ROWNUM を使用すると、ビューの最適化に影響を与える可能性があります。