0667NAME IS NULL
2017/10/12(木) 09:09:43.10ID:???まず、>>583は構文が間違っているので以下のように直す。
(SELECT句でつける別名はWHERE句では使えない。)
SELECT t.*, ROWNUM as num FROM ( SELECT * FROM 学生別点数テーブル ORDER BY 点数 DESC ) t WHERE ROWNUM <= 10;
このとき、WHERE句のROWNUMは副問合せ内のORDER BYの順序で振られる。
これはマニュアルに明確に書かれている。
しかし、このSELECT文全体の結果が副問合せ内のORDER BYの順序で
返されることは保証されていない。
もっと言えばSELECT句のROWNUMがWHERE句のROWNUMと同じになるとも限らない。
WHERE句を評価した後、SELECT句を評価するまでの間に
順序を変えてはいけないと決まっているわけではなく、
順序が変わればROWNUMも変わる可能性がある。
(副問合せを評価した後、主問合せのWHERE句を評価するまでの間にも
同じことが言えるが、これはOracleが自分でマニュアルで規定している。)