結果を並べ替える

完了

クエリを処理する論理的な順序において、ORDER BY は最後に実行される SELECT ステートメントのフェーズです。 ORDER BY を使用すると、SQL Server からクライアント アプリケーションに返される行の並べ替えを制御できます。 SQL Server ではテーブル内の行の物理的な順序は保証されません。行がクライアントに返される順序を制御する唯一の方法は、ORDER BY 句を使用することです。 この動作はリレーショナル理論と一致しています。

ORDER BY 句の使用

クエリの結果を特定の順序で返すよう SQL Server に指示するには、次の形式で ORDER BY 句を追加します。

SELECT<select_list>
FROM <table_source>
ORDER BY <order_by_list> [ASC|DESC];

ORDER BY では、そのリスト内にいくつかの種類の要素を指定できます。

  • 名前による列。 結果の並べ替えに使用する列の名前を指定できます。 結果は最初の列の順で返された後、追加の各列ごとに順にサブソートされます。
  • 列の別名。 ORDER BY は SELECT 句の後に処理されるので、SELECT リストで定義されている別名にアクセスできます。
  • SELECT リスト内の序数位置による列。 位置の使用はお客様のアプリケーションでは推奨されません。読みやすさが低下し、ORDER BY リストを最新の状態に保つために細心の注意が必要になるためです。 ただし、SELECT リスト内の複雑な式に対しては、トラブルシューティング中に位置番号を使用すると便利なことがあります。
  • SELECT リストには含まれていないが、FROM 句に含まれているテーブルから利用できる列。 クエリで DISTINCT オプションを使用する場合は、ORDER BY リスト内のすべての列を SELECT リストに含める必要があります。

並べ替えの方向

並べ替え順序の決定に使用する列の指定に加えて、並べ替えの方向を制御することもできます。 昇順 (A-Z、0-9) の場合は ASC を、降順 (Z-A、9-0) の場合は DESC を使用できます。 昇順の並べ替えが既定値です。 次の例のように、各列に独自の方向を指定できます。

SELECT ProductCategoryID AS Category, ProductName
FROM Production.Product
ORDER BY Category ASC, Price DESC;