LoginSignup
0
0

More than 1 year has passed since last update.

100日でSQLの達人になる@LeetCode! Day59 <ORDER BY句で使えるOFFSET-FETCH句>

Posted at

ORDER BY句で使えるOFFSET-FETCH句について理解する

前回に引き続きLeetCodeの問題はお休み。
しばらくLeetCodeの方はお休みしましたが、そろそろ問題の方に戻ろうと思います。
今回のテーマは前回よりは簡単です。
ただコマンドにFETCHと出てくるので前回のCURSORの話と混同しやすいため要注意。

構文

SQL
GROUB BY句の中で
    OFFSET 0以上の整数(式も可) ROWS
    FETCH NEXT 1以上の整数(式も可、FETCHは省略可) ROWS ONLY

これで、先頭からOFFSETで指定した行分スキップし、FETCHで指定した行分取得します。
指定する場合はROWSONLYも忘れずに記載が必要。

前回同様にdb<>fiddleを使います。

実行例

下記が実行例です。

CREATE TABLE tbl (id INT)
DECLARE @num INT =1

WHILE @num <= 50
 BEGIN
  INSERT INTO tbl (id) VALUES(@num)
     SET @num=@num+1
 END
-- ここまでで合計50行の行番号のみ入ったテーブルが出来ています。

--使用例1
SELECT id FROM tbl
 ORDER BY id
 OFFSET 20 ROWS
 FETCH NEXT 10 ROWS ONLY
 
 --使用例2
SELECT id FROM tbl
 ORDER BY id
 OFFSET 45 ROWS;
 
 --使用例3
SELECT id FROM tbl
 ORDER BY id
 OFFSET 45 ROWS
 FETCH NEXT 20 ROWS ONLY

| id |
| -: |
| 21 |
| 22 |
| 23 |
| 24 |
| 25 |
| 26 |
| 27 |
| 28 |
| 29 |
| 30 |

| id |
| -: |
| 46 |
| 47 |
| 48 |
| 49 |
| 50 |

| id |
| -: |
| 46 |
| 47 |
| 48 |
| 49 |
| 50 |

db<>fiddle here

使用例2ではFETCH句を省略していますが、後ろ全部を表示しています。
使用例3ではFETCH句で20行指定していますが5行しか無いため5行分のみ表示しています。

今日のポイントはORDER BY句でOFFSET, FETCHを使って表示する行数をコントロールするとした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0