Oracle では、 Mysql や PostgreSQL で使用可能な LIMIT, OFFSET 句を使用して取得するレコードの範囲を指定することはできません。ここでは、Oracle の ROWNUM 擬似列を使用して、LIMIT, OFFSET 句の動作を再現させるサンプルを掲載しています。
スポンサーリンク
MySQL の LIMIT, OFFSET 句 SQL サンプル
まずは、最初の 5 レコードを除外して、6 レコード目から 10 レコードを取得する SQL のサンプルです。
// PostgreSQL と互換性のある記述方法 SELECT * FROM table1 LIMIT 10 OFFSET 5; // mysql 独自の記述方法 SELECT * FROM table1 LIMIT 5, 10;
ROWNUM 疑似列を使用して LIMIT および OFFSET 句を再現
Mysql や PostgreSQL の LIMIT および OFFSET 句を Oracle の ROWNUM を使って再現する SQL になります。 ただし、ROWNUM カラム(サンプル内の ADD_ROWNUM)が追加されることになるので、完全に一致した結果が取得できる というわけではありませんが、問題となることも少ないのではないでしょうか。
SELECT a2.* FROM ( SELECT a1.*, ROWNUM AS "ADD_ROWNUM" FROM ( SELECT * FROM table1 ) a1 ) a2 WHERE a2."ADD_ROWNUM" BETWEEN 6 AND 15
SQL Server の場合
SQL Server も LIMIT および OFFSET 句は使用できません。(未検証ですが) SELECT TOP や ROW_NUMBER() OVER 等を使用して同等の動作を再現することはできそうです。