はじめに
プログラマになり日々の仕事にあっぷあっぷですが
メモがてら書きます。
最近SQLを読むことが増えました!
見慣れないROWNUM
という記載を見つけました👀
oracleってLIMIT句使えない
学習中ずっとMySQLを使用していたので、
oracleでLIMIT
句が使えないことを初めて知りました!
LIMIT句の代わりに使用するのが、ROWNUM
だそうです。
MySQLのLIMIT句
LIMIT
句を使用すると、取得する行数を制限できます。
SELECT *
FROM employees
ORDER BY hire_date DESC
LIMIT 10;
/*並び替えて、上から10件取得*/
SELECT *
FROM employees
ORDER BY hire_date DESC
LIMIT 5, 10;
/*並び替えて、6番目から10件取得*/
oracleのROWNUM
Oracleでは ROWNUM を使用して、行番号を取得できます。
ただし、ROWNUM
は取得する順序に従って番号が振られます。
そのためORDER BY
を使用する場合は、サブクエリを使用してROWNUM
を適用するのが一般的です。
SELECT id, name, hire_date
FROM (
SELECT id, name, hire_date
FROM employees
ORDER BY hire_date DESC
)
WHERE ROWNUM <= 10;
/*並び替えて、上から10件取得*/
また、オフセットを指定する場合はROWNUM
の代わりにROW_NUMBER()
を使用します。
SELECT id, name, hire_date
FROM (
SELECT id, name, hire_date, ROW_NUMBER() OVER (ORDER BY hire_date DESC) rn
FROM employees
)
WHERE rn BETWEEN 6 AND 15;
/*並び替えて、6番目から10件取得*/
おわりに
設計書と睨めっこな毎日です。。
oracle特有なことは、都度調べて引き続き頑張ります!
参考