[Oracle]取得するデータの行数の上限を制限する(LIMIT句)
[Oracle]取得するデータの行数の上限を制限する(LIMIT句)
SQLを発行する際に、データの行数を制限する用途はよくあると思います。
Oracleで行数制限をしようとした場合、
MySQLのようにLimit句があるわけではなく、少しクセがあるのでまとめてみました。
ROWNUMを指定する
ROWNUMとはその名の通り行番号を指します。
Oracleではこの行番号を指定して、取得するデータの行数を制限します。
例えば、
1行目だけを取得したい場合は
SELECT * FROM TEST_TABLE WHERE ROWNUM = 1;
と指定してます。
これでSELECTした結果から1行目を取得します。
ここで注意したいのが、
ROWNUMは結果を絞るものではなく、SELECTの結果から行番号を指定して行を取得すると言うことです。
SELECT * FROM TEST_TABLE WHERE ROWNUM = 2;
このようにROWNUMに2を指定しても、MySQLでのLIMITみたいに
2行取得されるわけではなく、
SELECTした結果の2行目だけが取得されます。
よって、
2行分取得したい場合は
SELECT * FROM TEST_TABLE WHERE ROWNUM <= 2;
このような形で取得します。
ちなみに、
ORDER BYを使用する場合は、並び替えが行われる前の状態での行番号となるのも注意してください。
こちらの記事もどうぞ
embulkを使ってOracle Databaseからデータ抽出する際の文字化け解決
MySQLでInsertとUpdateを同時に行う方法 – ON DUPLICATE KEY UPDATE文