SQL TOP, LIMIT, FETCH FIRST, ROWNUM

SQL SELECT TOP句

SELECT TOP句は、返されるレコードの数を指定するために使用されます。

大規模なテーブルに対しては特に有用であり、パフォーマンスに影響を与えることがあります。

Customersテーブルの最初の3件のみを選択します:

SELECT TOP 3 * FROM Customers;

ヒント: SELECT TOP句はすべてのデータベースシステムでサポートされているわけではありません。MySQLではLIMIT句、OracleではFETCH FIRST n ROWS ONLYやROWNUMが使用されます。

SQL Server / MS Accessの構文:

SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;

MySQLの構文:

SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;

Oracle 12の構文:

SELECT column_name(s)
FROM table_name
ORDER BY column_name(s)
FETCH FIRST number ROWS ONLY;

古いバージョンのOracleでは以下のように記述します:

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;

ORDER BYを使用する古いOracleの構文:

SELECT *
FROM (SELECT column_name(s) FROM table_name ORDER BY column_name(s))
WHERE ROWNUM <= number;

デモデータベース

以下は、例で使用されるCustomersテーブルの一部です:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

LIMIT

以下のSQL文は、MySQLでの例を示しています:

Customersテーブルの最初の3件を選択します:

SELECT * FROM Customers
LIMIT 3;

FETCH FIRST

以下のSQL文は、Oracleでの例を示しています:

Customersテーブルの最初の3件を選択します:

SELECT * FROM Customers
FETCH FIRST 3 ROWS ONLY;

SQL TOP PERCENTの例

以下のSQL文は、”Customers”テーブルから最初の50%のレコードを選択します(SQL Server/MS Access用):

SELECT TOP 50 PERCENT * FROM Customers;

以下のSQL文は、Oracleでの等価例を示しています:

SELECT * FROM Customers
FETCH FIRST 50 PERCENT ROWS ONLY;

WHERE句の追加

以下のSQL文は、SQL Server/MS Accessで”Country”が”Germany”である最初の3件のレコードを選択します:

SELECT TOP 3 * FROM Customers
WHERE Country='Germany';

以下のSQL文は、MySQLでの等価例を示しています:

SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;

以下のSQL文は、Oracleでの等価例を示しています:

SELECT * FROM Customers
WHERE Country='Germany'
FETCH FIRST 3 ROWS ONLY;

ORDER BYキーワードの追加

結果をソートして最初の3件を返す場合は、ORDER BYキーワードを追加します。

SQL ServerとMS Access用:

顧客名(CustomerName)を逆アルファベット順にソートし、最初の3件を返します:

SELECT TOP 3 * FROM Customers
ORDER BY CustomerName DESC;

MySQLでの等価例を示しています:

SELECT * FROM Customers
ORDER BY CustomerName DESC
LIMIT 3;

Oracleでの等価例を示しています:

SELECT * FROM Customers
ORDER BY CustomerName DESC
FETCH FIRST 3 ROWS ONLY;