LIMIT句では取得件数を制限できます。データベースにデータが沢山入っているときに全部取得しても困る、というときにはLIMIT句を使いましょう。例えば、全部で1000件のデータがあるときに100件だけ欲しいときにはlimit 100と記述します。また、1件だけあれば良いときはlimit 1と記述します。

LIMIT句の基本構文


SELECT 列名 FROM 表名 LIMIT 数字

全部で1000件のデータがあるとき、最初の100件(1~100)は取得できたとして、次の100件(つまり101~200)をどのように取得するのか?そこで使うのがOFFSET句です。

OFFSET句の基本構文


SELECT 列名 FROM 表名 LIMIT 数字 OFFSET 数字

OFFSETを100と指定すれば、101件目からの取得が可能になります。

…が、RDBではORDER BY句で並び順を指定しない限りは取得時の並び順が保証されません。ORDE BY句とセットで使うのが正しい運用となります。

ID昇順で101~200のデータを取得する例


SELECT 列名 FROM 表名 ORDER BY id DESC LIMIT 100 OFFSET 100

AlaSQLでの記述例


let sales = [
    {id:1, item_id:1, price:200, cost:50, created:'2020-6-12 10:00:00' },
    {id:2, item_id:1, price:180, cost:50, created:'2020-6-12 11:00:00' },
    {id:3, item_id:1, price:250, cost:60, created:'2020-6-13 10:00:00' },
    {id:4, item_id:1, price:200, cost:60, created:'2020-6-13 14:00:00' },
    {id:5, item_id:1, price:150, cost:60, created:'2020-6-13 18:00:00' },
];
let result = alasql("SELECT "
                        + "* "
                        + "FROM ? "
                        + "ORDER BY id ASC LIMIT 2 OFFSET 1"
                    ,[sales]);
console.log(result);

流石に1000件もデータを用意すると長くなり過ぎるので、LIMITを2、OFFSETを1に設定しています。ID昇順なので、OFFSETが1ならID2が取得の起点となります。そしてLIMITが2なのでID2とID3が取得できれるはずです。

実行結果


0: {id: 2, item_id: 1, price: 180, cost: 50, created: "2020-6-12 11:00:00"}
1: {id: 3, item_id: 1, price: 250, cost: 60, created: "2020-6-13 10:00:00"}

補足

LIMIT句とOFFSET句はSELECT文以外にもDELETE文やUPDATE文でも利用可能です。