sql >> データベース >  >> RDS >> Sqlserver

SQLServer結果セットの行を制限する方法

    問題:

    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に固有です。


    1. OrmliteまたはsqliteどちらがAndroidの観点に適していますか?

    2. SQLServerの別のテーブルに基づいて一時テーブルを作成する

    3. PG COPYエラー:整数の入力構文が無効です

    4. テーブル行の編集GUIを使用してSQLServerテーブルに行を挿入する方法-SQLServer/TSQLチュートリアルパート101