問題:
SQLServer結果セットの行を制限したい。
例:
私たちのデータベースには、toy
id
列にデータがあります 、name
、およびprice
。
id | 名前 | 価格 |
---|---|---|
161 | バイクBMX | 200.00 |
121 | ロボットトビー | 185.50 |
213 | 釣りゲーム | 25.00 |
102 | 動物のパズル | 45.80 |
111 | レーストラックセット | 126.70 |
233 | 簡単なレンガ | 21.00 |
おもちゃの名前と価格を選択しましょう。ただし、最初の5行のみを表示する必要があります。
ソリューション1:
SELECT name, price FROM toy ORDER BY price OFFSET 0 ROWS FETCH FIRST 5 ROWS ONLY;
クエリの結果は次のとおりです。
name | 価格 |
---|---|
簡単なレンガ | 21.00 |
釣りゲーム | 25.00 |
動物のパズル | 45.80 |
レーストラックセット | 126.70 |
ロボットトビー | 185.50 |
ディスカッション:
結果セットの行を制限するには、オプションのOFFSET句とFETCH句を指定してORDERBYを使用します。最初に、クエリは行をソートします(ORDERBY)。次に、結果セットの最初の行(OFFSET ... ROWS)と返される行数(FETCH ... ONLY)をSQLServerに指示します。
OFFSET句は、ORDERBYの直後に配置されます。整数は、カウントする最初の行を示し(SQL Serverでは、最初の行は0、2番目の行は1など)、その後にキーワードROWまたはROWSが続きます。 ROWまたはROWSのいずれかを使用できますが、1行にはROWを使用し、0および複数行にはROWSを使用することをお勧めします。写真を見てください:
この例では、価格で並べ替えています (ORDER BY price
)そして最初の行から結果を返し始めます(OFFSET 0 ROWS
)。次に、キーワードFIRSTを指定してFETCHを使用します。 FIRSTまたはNEXTを使用できます。レコードを省略せずに最初の行から開始する場合はFIRSTを使用し、行が省略される場合(つまり、OFFSETが0より大きい場合)はNEXTを使用することをお勧めします。
最後に、選択する行数とキーワードROWSONLYがあります。複数の行を返す場合はROWSONLYを使用し、結果を1行に制限する場合はROWONLYを使用します。この例では、5行に制限しています(FETCH FIRST 5 ROWS ONLY
。
以下に、行を5つに制限するが、テーブルの5番目の行から開始する別のクエリがあります(OFFSET 4 ROWS
):
ソリューション2:
SELECT name, price FROM toy ORDER BY price OFFSET 4 ROWS FETCH NEXT 5 ROWS ONLY;
クエリの結果は次のとおりです。
name | 価格 |
---|---|
ロボットトビー | 185.50 |
バイクBMX | 200.00 |
このクエリは、示された5行ではなく、2行のみを返すことに注意してください。写真を見てください:
なぜ2行しかないのですか?このテーブルには6つのレコードしか含まれていないためです。最初の4行を省略し、行5から開始すると、残りの行は2行だけになります。
SQL Serverには、行を制限する別の方法があります。TOP句です。
ソリューション3:
SELECT TOP 3 name, price FROM toy ORDER BY price;
クエリの結果は次のとおりです。
name | 価格 |
---|---|
簡単なレンガ | 21.00 |
釣りゲーム | 25.00 |
動物のパズル | 45.80 |
行を省略する必要がない場合は、SQL ServerのTOP句を使用して、返される行を制限できます。 SELECTの直後に配置されます。 TOPキーワードの後には、返される行数を示す整数が続きます。この例では、価格で注文しました 次に、返される行を3つに制限しました。
OFFSET – FETCHメソッドとは異なり、TOPはORDERBYを必要としません。これは同様の例ですが、レコードを並べ替えることはありません:
ソリューション4:
SELECT TOP 3 name, price FROM toy;
クエリの結果は次のとおりです。
異なるレコードが返されていることに注意してください。通常(常にではありませんが)、行はレコードがテーブルに挿入された順序で表示されます。
OFFSETとFETCHはSQL標準であるため、TOPの代わりにOFFSETとFETCHを使用することをお勧めします。 TOPはT-SQLに固有です。