質問
SQLリクエストの結果を制限することは可能ですか?
たとえば、以下から最大50行のみを返します。
SELECT * FROM <table>
ありがとう。
解決
はい、これは可能です。これは、DBエンジン間で異なります。
postgres:
SELECT * FROM <table> LIMIT 50
SQLサーバー:
SELECT TOP 50 * FROM <table>
...
他のヒント
使用できます 上の条項:
SELECT TOP 50 * FROM <table>
あなたのデータベースがそれをサポートしていない場合、あなたも試すことができます LIMIT
と ROWNUM
ただし、これは使用しているデータベースに依存します。
はい、もちろんmysqlでは可能性があります:
Limit句は、Selectステートメントによって返される行の数を制約するために使用できます。 Limitは、1つまたは2つの数値引数を取ります。どちらも非陰性整数定数でなければなりません(準備されたステートメントを使用する場合を除く)。
2つの引数を使用すると、最初の引数は最初の行のオフセットを指定します。2番目の引数は、戻る行の最大数を指定します。初期行のオフセットは0(1ではない)です。
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
特定のオフセットから結果セットの最後まですべての行を取得するには、2番目のパラメーターに多数を使用できます。このステートメントは、96行目から最後の行まですべての行を取得します。
SELECT * FROM tbl LIMIT 95,18446744073709551615;
1つの引数で、値は結果セットの先頭から戻る行の数を指定します。
SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows
つまり、limit row_countは制限0、row_countに相当します。
mysqlでは、aを使用します 制限 句
SELECT * FROM <table> LIMIT 50
SQL標準
私が説明したように この記事, 、SQL:2008 Standardは、SQLの結果セットを制限するために次の構文を提供します。
SELECT
title
FROM
post
ORDER BY
id DESC
FETCH FIRST 50 ROWS ONLY
SQL:2008 TOP-N RECORDS条項は、12C以降Oracleでサポートされています。2012年以降、SQL Server、8.4からPostgreSQL。
SQLサーバー
SQL ServerはSQL:2008 TOP-N Standard Syntaxをサポートしていますが、オフセット句も提供する必要があります。
SELECT
title
FROM
post
ORDER BY
id DESC
OFFSET 0 ROWS
FETCH FIRST 50 ROWS ONLY
古いSQL Serverバージョンでは、Top:を使用できます。
SELECT TOP 50
title
FROM
post
ORDER BY
id DESC
Oracle 11g以上のバージョン
バージョン12Cの前に、TOP-Nレコードを取得するには、派生テーブルとRownumの疑似柱を使用する必要がありました。
SELECT *
FROM (
SELECT
title
FROM
post
ORDER BY
id DESC
)
WHERE ROWNUM <= 50
mysqlおよびpostgresql 8.3以上
従来、MySQLとPostgreSQLはLIMIT句を使用して、結果をTOPNレコードに制限します。
SELECT
title
FROM
post
ORDER BY
id DESC
LIMIT 50