ORDER BY は、クエリ結果を 1 つ以上のフィールドでソートします。必ず ORDER BY を LIMIT 句と併用してください — これがない場合、エンジンは結果セット全体をソートする必要があり、パフォーマンスが大幅に低下します。
構文
SELECT [ DISTINCT ]
{ projectItem [, projectItem ]* }
FROM tableExpression
ORDER BY { orderByItem [ASC|DESC] [, orderByItem [ASC|DESC]]* }
LIMIT N
OFFSET Mパラメーター:
| パラメーター | 説明 |
|---|---|
orderByItem | ソート対象のフィールドです。カンマ区切りで複数のフィールドを指定できます。 |
ASC | DESC | 並べ替え方向です。ASC(昇順)は、方向を明示しない場合のデフォルト値です。 |
LIMIT N | 返される最大レコード数です。ORDER BY を使用する場合は必須です。 |
OFFSET M | 結果の返却前にスキップするレコード数です。LIMIT と併用してページネーションを実現します。 |
例
以下の例では、phone テーブル(フィールド: nid、brand、price、size)を使用します。
単一フィールドによる並べ替え(デフォルト:昇順)
SELECT nid, brand, price, size FROM phone ORDER BY price LIMIT 1000price を基準に、最も低い価格から最も高い価格へと並べ替えた最大 1,000 件のレコードを返します。ASC も DESC も指定しない場合、デフォルトで昇順になります。
単一フィールドによる明示的な昇順並べ替え
SELECT nid, brand, price, size FROM phone ORDER BY price ASC LIMIT 1000前の例と同等の動作です。クエリ内で並べ替え方向を明確にしたい場合には、ASC を明示的に指定してください。
複数フィールドによる並べ替え
SELECT nid, brand, price, size FROM phone ORDER BY size DESC, price DESC LIMIT 1000まず size を降順で並べ替えます。size が同じレコードについては、次に price を降順で並べ替えます。以降の各フィールドは、直前のフィールドの並べ替え結果における同順位(タイ)を解消するための補足条件となります。
ソート済み結果のページネーション
SELECT nid, brand, price, size FROM phone ORDER BY price DESC LIMIT 10 OFFSET 10OFFSET 10 により先頭 10 件をスキップし、LIMIT 10 により次の 10 件(合計で 11–20 件目)を返します。
並べ替えを行わずレコードを返す
SELECT nid, brand, price, size FROM phone LIMIT 10並べ替え順序を保証しない状態で 10 件のレコードを返します。並べ替えの必要がなく、可能な限り高速な応答を得たい場合に使用します。