PostgreSQL で行を制限する

Bilal Shahid 2023年6月20日
  1. LIMIT 句を使用して PostgreSQL で行を制限する
  2. FETCH FIRST 句を使用して PostgreSQL で行を制限する
PostgreSQL で行を制限する

PostgreSQL では、SELECT ステートメントを使用して、テーブルから行を一覧表示できます。 ただし、選択的な行のみをリストしたい場合は、それに応じてさまざまな句を使用する必要があります。

テーブルから選択した行を表示するために SELECT ステートメントで使用される 1つの句は、LIMIT 句です。 LIMIT 句は、結果データにリストされる行数を制限できます。

この記事では、LIMIT キーワードと PostgreSQL でのその使用法について説明します。

LIMIT 句を使用して PostgreSQL で行を制限する

LIMIT 句の構文を以下に示します。

LIMIT { count }

ここで、count フィールドは、カウントされて表示される行数を指します。 count の代わりに ALL キーワードを使用して、クエリによって返されたすべての行を表示できます。これは、無制限と同じ効果があります。

次のテーブルを持つサンプル データベースで LIMIT 句がどのように使用されるかを理解してみましょう。

create table dummy
(
num int not null,
constraint PK primary key (num)
);

それでは、このサンプル テーブルにいくつかの値を入力してみましょう。

insert into dummy values (150), (120), (330), (240), (150), (60), (270), (110), (400), (350);

シンプルな SELECT * from dummy ステートメントを使用してこのテーブルの行をリストすると、次の結果が得られます。

PostgreSQL 制限 - 出力 1

最初の 5 行だけを表示するにはどうすればよいでしょうか。 そのために LIMIT 句を簡単に使用できます。

これは SELECT ステートメントのオプション機能であり、次の方法で使用できます。

SELECT * from dummy
LIMIT 5;

これにより、テーブルの最初の 5 行のみが一覧表示されます。

PostgreSQL 制限 - 出力 2

注: LIMIT 句で指定された行の値がテーブルに存在する行よりも大きい場合、すべてのテーブル行が表示されます。

ただし、行がソートされていない場合、LIMIT 句を使用するのはあまり賢明ではありません。つまり、行の順序が予測できず、LIMIT クエリがさまざまな結果を表示する可能性があります。 SELECT クエリで ORDER BY 句と共に LIMIT 句を使用することで、これに対抗できます。

ORDER BY コマンドを使用すると、テーブルの 1つまたは複数の属性に基づいてデータを並べ替えることができます。 この一連の属性を使用して、昇順または降順で並べ替えることもできます。

ダミー テーブルで ORDER BY と共に LIMIT 句を使用した場合の効果を見てみましょう。 コードは次のようになります。

SELECT * from dummy
ORDER BY num
LIMIT 5;

これにより、次の結果が得られます。

PostgreSQL 制限 - 出力 3

ORDER BY 句がデフォルトでデータを昇順でソートしたため、クエリが num の 5つの最小値を返したことがわかります。 したがって、LIMIT 句と ORDER BY 句を使用して、指定された最大数または最小数の値を取得できます。

最初の行から始まる行を表示したくない場合はどうすればよいでしょうか? LIMIT 句は、これを行うための柔軟性も与えてくれます。

構文は次のようになります。

LIMIT { count }
OFFSET { start }

start の代わりの値は、指定された行数が表示される前にスキップされる行数を指定します。 これは、start 行数がスキップされ、次の count 行数が出力として表示されることを意味します。

注: OFFSET 句で指定された start の値がテーブルに存在する行よりも大きい場合、テーブルの行は表示されません。

dummy テーブルで次のクエリを実行して、OFFSET の使用方法を示します。

SELECT * from dummy
ORDER BY num
LIMIT 5
OFFSET 2;

このコードは 3 行目から開始し、最初の 2 行を指定どおりにスキップしてから、次の 5 行を次のように表示します。

PostgreSQL 制限 - 出力 4

注: count の代わりに NULL を設定すると、制限なしと同じ効果があり、結果のすべての行が表示されます。 start の代わりに NULL を設定すると、OFFSET 0 と同じ効果があり、最初の行から表示を開始します。

PostgreSQL は LIMIT 句に相当するものを提供しています。これを使用して、テーブルから必要な数の行のみを出力できます。 これについては以下で説明します。

FETCH FIRST 句を使用して PostgreSQL で行を制限する

LIMIT 句の代わりに FETCH FIRST 句を使用できます。構文は次のとおりです。

FETCH FIRST { count } ROWS ONLY;

ここでも、count は表示したい行数に置き換えられます。 同じダミーテーブルを使用して、コードでFETCH FIRST句がどのように使用されているかを見てみましょう。

SELECT * from dummy
ORDER BY num
FETCH FIRST 5 ROWS ONLY;

これは、LIMIT 5 を書き込むのと同じ効果があり、次の結果の行が表示されます。

PostgreSQL FETCH FIRST - 出力 1

ただし、最初の行から始まる行を表示したくない場合は、OFFSET 句と FETCH FIRST を使用できます。 これは次のように書かれています。

OFFSET { start }
FETCH FIRST { count } ROWS ONLY;

これを、このクエリの形式で dummy テーブルで使用してみましょう。

SELECT * from dummy
ORDER BY num
OFFSET 2
FETCH FIRST 5 ROWS ONLY;

これにより、最初の 2 行をスキップした後、次の行がフェッチされて出力されます。

PostgreSQL FETCH FIRST - 出力 2

これは、SELECT クエリの結果として表示される行数を制限するために PostgreSQL で LIMIT 句が使用されるさまざまな方法をまとめたものです。 LIMIT コマンドと FETCH FIRST コマンドを互いの代替として使用する方法を学習していただければ幸いです。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

関連記事 - PostgreSQL Table