SQL 速習チュートリアル

SQL SELECT TOP, LIMIT, FETCH FIRST

1. SQL SELECT TOP 句

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

SELECT TOP 句は、数千件のレコードを持つ巨大なテーブルにおいて非常に有用です。膨大な数のレコードを返すと、パフォーマンスに悪影響を及ぼす可能性があるためです。

次の SQL は、"Customers" テーブルの最初の 3 レコードのみを選択します。

1.1 例(自分専用の SQL Server を取得)

Customers テーブルの最初の 3 レコードのみを選択:

SELECT TOP 3 * FROM Customers;

       注意: すべてのデータベースシステムが SELECT TOP 句をサポートしているわけではありません。MySQL は限定された数のレコードを選択するために LIMIT 句をサポートしており、Oracle は FETCH FIRST n ROWS ONLY を使用します。

2. SQL Server / MS Access のシンタックス

SELECT TOP 数値|パーセント カラム名
FROM テーブル名
WHERE 条件;

3. MySQL のシンタックス

SELECT カラム名
FROM テーブル名
WHERE 条件
LIMIT 数値;

4. Oracle 12+ のシンタックス

SELECT カラム名
FROM テーブル名
ORDER BY カラム名
FETCH FIRST 数値 ROWS ONLY;

5. デモ用データベース

以下は、例題で使用する Customers テーブルの抜粋です。

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

6. MySQL - LIMIT 句

次の SQL は、MySQL における同等の例を示しています。

6.1 例

Customers テーブルの最初の 3 レコードを選択:

SELECT * FROM Customers
LIMIT 3;

7. Oracle - FETCH FIRST 句

次の SQL は、Oracle における同等の例を示しています。

7.1 例

Customers テーブルの最初の 3 レコードを選択:

SELECT * FROM Customers
FETCH FIRST 3 ROWS ONLY;

8. SQL TOP PERCENT の例

ここでは、SELECT TOP 句をパーセント形式のシンタックスで使用します。

次の SQL は、"Customers" テーブルの最初の 50% のレコードを選択します(SQL Server/MS Access 用):

8.1 例

SELECT TOP 50 PERCENT * FROM Customers;

次の SQL は、Oracle における同等の例を示しています。

8.2 例

SELECT * FROM Customers
FETCH FIRST 50 PERCENT ROWS ONLY;

9. WHERE 句を伴う SELECT TOP

次の SQL は、"Customers" テーブルから Country が "Germany" である最初の 3 レコードを選択します(SQL Server/MS Access 用):

9.1 例

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

MySQL における同等の例:

9.2 例

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

Oracle における同等の例:

9.3 例

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

10. SELECT TOP と ORDER BY

結果をソートしてから、そのソートされた結果の最初の 3 レコードを返したい場合は、ORDER BY キーワードを追加します。

SQL Server および MS Access の場合:

10.1 例

結果を CustomerName の降順(アルファベットの逆順)でソートし、最初の 3 レコードを返す:

SELECT TOP 3 * FROM Customers
ORDER BY CustomerName DESC;

MySQL における同等の例:

10.2 例

SELECT * FROM Customers
ORDER BY CustomerName DESC
LIMIT 3;

Oracle における同等の例:

10.3 例

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