SQL LIMIT

概要:このチュートリアルでは、SQLのLIMIT句を使用して、クエリから返される行数を制限する方法を学びます。

SQL LIMIT句の概要

selectステートメントによって返される行数を制限するには、LIMITおよびOFFSET句を使用します。

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

SELECT 
    column_list
FROM
    table1
ORDER BY column_list
LIMIT row_count OFFSET offset;Code language: SQL (Structured Query Language) (sql)

この構文では、

  • LIMIT row_countは、クエリによって返される行数(row_count)を決定します。
  • OFFSET offset句は、行の返却を開始する前にoffset行をスキップします。

OFFSET句はオプションです。省略した場合、クエリはSELECT句によって返される最初の行からrow_count行を返します。

LIMIT句を使用する場合は、結果セット内の行の順序を確実にするために、ORDER BY句を使用することが重要です。

すべてのデータベースシステムがLIMIT句をサポートしているわけではありません。したがって、LIMIT句は、MySQLPostgreSQLSQLite、Sybase SQL Anywhere、HSQLDBなどの一部のデータベースシステムでのみ利用可能です。SQL Serverを使用する場合は、代わりにSELECT TOPを使用できます。

SQL LIMIT句の例

LIMIT & OFFSET句を示すために、サンプルデータベースemployeesテーブルを使用します。

employees_table

次のステートメントは、employeesテーブルのすべての行をfirst_name列でソートして返します。

SELECT 
    employee_id, 
    first_name, 
    last_name
FROM
    employees
ORDER BY 
	first_name;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL LIMIT example

次の例では、LIMIT句を使用して、SELECT句によって返される結果セットの最初の5行を返します。

SELECT 
    employee_id, 
    first_name, 
    last_name
FROM
    employees
ORDER BY 
	first_name
LIMIT 5;    Code language: SQL (Structured Query Language) (sql)

試してみる

SQL LIMIT 5 example

次の例では、LIMITOFFSETの両方の句を使用して、4番目の行から始まる5行を返します。

SELECT 
    employee_id, first_name, last_name
FROM
    employees
ORDER BY first_name
LIMIT 5 OFFSET 3;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL LIMIT OFFSET example

MySQLでは、次のようにLIMIT & OFFSET句の短い形式を使用できます。

SELECT 
    employee_id, 
    first_name, 
    last_name
FROM
    employees
ORDER BY 
	first_name
LIMIT 3 , 5;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL LIMITを使用して、最大値または最小値を持つ上位N行を取得する

LIMIT句を使用して、最大値または最小値を持つ上位N行を取得できます。たとえば、次のステートメントは、最も高い給与を持つ上位5人の従業員を取得します。

SELECT 
    employee_id, 
    first_name, 
    last_name, 
    salary
FROM
    employees
ORDER BY 
	salary DESC
LIMIT 5;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL LIMIT top 5 highest salary

最初に、ORDER BY句が従業員を給与で降順にソートし、次にLIMIT句がクエリから返される5行を制限します。

最も低い給与を持つ上位5人の従業員を取得するには、代わりに昇順で給与で従業員をソートします。

SQL LIMIT top 5 lowest salary

N番目に高い値を持つ行を取得する

会社で2番目に高い給与を持つ従業員を取得する必要があるとします。そのためには、次のようにLIMIT OFFSET句を使用します。

SELECT 
    employee_id, 
    first_name, 
    last_name, 
    salary
FROM
    employees
ORDER BY 
	salary DESC
LIMIT 1 OFFSET 1;Code language: SQL (Structured Query Language) (sql)

試してみる

ORDER BY句は、従業員を給与で降順にソートします。そして、LIMIT 1 OFFSET 1句は、結果セットから2番目の行を取得します。

このクエリは、すべての従業員の給与が異なるという前提で機能します。同じ最高給与を持つ2人の従業員がいると失敗します。

また、同じ2番目に高い給与を持つ従業員が2人以上いる場合、クエリは最初の従業員のみを返します。

この問題を修正するには、次のステートメントを使用して、最初に2番目に高い給与を取得できます。

SELECT DISTINCT
    salary
FROM
    employees
ORDER BY salary DESC
LIMIT 1 , 1;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL LIMIT 2nd highest salary

そして、結果を別のクエリに渡します。

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary = 17000;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL LIMIT 2nd highest salary example

サブクエリを知っている場合は、次のクエリのように両方のクエリを単一のクエリに結合できます。

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary = (SELECT DISTINCT
            salary
        FROM
            employees
        ORDER BY salary DESC
        LIMIT 1 , 1);Code language: SQL (Structured Query Language) (sql)

試してみる

概要

  • クエリによって返される行数を制限するには、LIMIT&OFFSET句を使用します。
  • LIMIT&OFFSETはSQL標準ではありません。
このチュートリアルは役立ちましたか?