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
ステートメントを使用してこのテーブルの行をリストすると、次の結果が得られます。
最初の 5 行だけを表示するにはどうすればよいでしょうか。 そのために LIMIT
句を簡単に使用できます。
これは SELECT
ステートメントのオプション機能であり、次の方法で使用できます。
SELECT * from dummy
LIMIT 5;
これにより、テーブルの最初の 5 行のみが一覧表示されます。
注:
LIMIT
句で指定された行の値がテーブルに存在する行よりも大きい場合、すべてのテーブル行が表示されます。
ただし、行がソートされていない場合、LIMIT
句を使用するのはあまり賢明ではありません。つまり、行の順序が予測できず、LIMIT
クエリがさまざまな結果を表示する可能性があります。 SELECT
クエリで ORDER BY
句と共に LIMIT
句を使用することで、これに対抗できます。
ORDER BY
コマンドを使用すると、テーブルの 1つまたは複数の属性に基づいてデータを並べ替えることができます。 この一連の属性を使用して、昇順または降順で並べ替えることもできます。
ダミー
テーブルで ORDER BY
と共に LIMIT
句を使用した場合の効果を見てみましょう。 コードは次のようになります。
SELECT * from dummy
ORDER BY num
LIMIT 5;
これにより、次の結果が得られます。
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 行を次のように表示します。
注:
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
を書き込むのと同じ効果があり、次の結果の行が表示されます。
ただし、最初の行から始まる行を表示したくない場合は、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 行をスキップした後、次の行がフェッチされて出力されます。
これは、SELECT
クエリの結果として表示される行数を制限するために PostgreSQL で LIMIT
句が使用されるさまざまな方法をまとめたものです。 LIMIT
コマンドと FETCH FIRST
コマンドを互いの代替として使用する方法を学習していただければ幸いです。
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