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文でも利用可能です。