【SQL Server】OFFSET FETCH(LIMITのかわり)

SQL ServerはLIMITの代わりにOFFSET FETCHを使う

LIMITではなくOFFSET FETCHが使える!

SQL Serverでデータ抽出する際、「最初の〇行を取得する」には「OFFSET FETCH」を使います。

Mysqlでは「LIMIT」が使えますが、SQL Serverでは「LIMIT」の代わりに「OFFSET・FETCH」を使います。

OFFSET {スキップ行数} ROWS

スキップする行数を指定します。スキップする必要ががない場合は0にします。

FETCH NEXT {取得する行数} ROWS ONLY

OFFSET句の処理後に取得する行数を指定します。

<参考データ>

--empテーブルを取得する
SELECT empno,empname FROM emp
ORDER BY empno;
empno empname
A001 佐藤花子
A002 田中太郎
A003 加藤一
A004 青木花
A005 藤田学

例1. OFFSET・FETCHで開始3行を取得する

--empテーブルの開始3行を取得する
SELECT empno,empname FROM emp 
ORDER BY empno
OFFSET 0 ROWS 
FETCH NEXT 3 ROWS ONLY;
empno empname
A001 佐藤花子
A002 田中太郎
A003 加藤一

「OFFSET」はスキップする行を指定します。「OFFSET 0 ROWS」として1行もスキップしないようにしました。

「FETCH」は「OFFSET」から取得する行です。ここでは「FETCH NEXT 3 ROWS ONLY」なので3行取得しました。

よって簡単にいうと、ここでは「1行目~3行目」を取得しました。

例2. OFFSET・FETCHで3行目~5行目を取得する

--empテーブルの3行目~5行目を取得する
SELECT empno,empname FROM emp 
ORDER BY empno
OFFSET 2 ROWS 
FETCH NEXT 2 ROWS ONLY;
empno empname
A004 青木花
A005 藤田学

「OFFSET」で2行スキップし3行目から開始します。OFFSETで2行取得するので、3行目~5行目を取得しました。

これでMysqlのLIMITと同じことができました。

以上、SQL ServerのOFFSET FETCHで行数を指定して取得しました。

 

コメント