SQL Serverで取得件数に制限をかける
2021-06-02
azblob://2022/11/11/eyecatch/pexels-vlada-karpovich-4050296-2.jpg

こんにちは、今年度入社した日高です。

最近業務でAzure上でSQL Serverを使用しており、取得行数に制限をかけたい場面に遭遇し少し詰まったので共有します

なぜ詰まったのか?

何度かMySQLとPostgreSQLだとlimit句というものがあり、limit句を利用することで取得件数に制限をかけることができます。

しかし、SQL Serverには存在しません。

学生時代に何度かMySQLとPostgreSQLを利用したことがあり、逆に詰まりました。

上位N件を取得する

上位N件のみ取得したい場合はtop句を使うことで実現できます\例えば、Userテーブルから上位100件のレコードを取得したい場合、

select top 100 * from User 

このように書くことができます。

N件目からM件目までを取得する

top句を使うと上位のデータをは取得できるようになります。

しかしtop句ではN件目からM件目のようなレコードの取得はできません。このような場合はoffset fetch句を利用することで取得できます。

例えば、Userテーブルから10件目から20件目のレコードを取得したい場合、

select * from User 
    order by Id 
    offset 10 rows 
    fetch next 10 rows only

このように書くことで取得することができます

order by句を書かないとエラーになる点、fetchはoffsetからの個数をを指定する点の2点には気を付けてください