Share via


ORDER BY の使用による行の並べ替え

ORDER BY 句は、1 つまたは複数 (8,060 バイト以内) の列に基づいて、クエリの結果を並べ替えます。ORDER BY 句の最大サイズの詳細については、「ORDER BY 句 (Transact-SQL)」を参照してください。

MicrosoftSQL Server 2005 以降の SQL Server では、SELECT リストで指定されていない FROM 句で、テーブルの列を並べ替えることを指定できます。ORDER BY 句で参照されている列名は、SELECT リスト内の列か FROM 句内のテーブルの列のいずれかと正確に対応している必要があります。SELECT リストで列名に別名を指定している場合、ORDER BY 句ではその別名だけを使用できます。同様に、FROM 句で別名を指定している場合、ORDER BY 句でそれらの列を修飾する際に使用できるのは別名だけです。

並べ替えは、昇順 (ASC) または降順 (DESC) になります。どちらも指定しなければ、昇順 (ASC) になります。

次のクエリでは、昇順の ProductID に従って並べ替えられた結果が返されます。

USE AdventureWorks;
GO
SELECT ProductID, ProductLine, ProductModelID
FROM Production.Product
ORDER BY ProductID

ORDER BY 句で複数の列の名前を指定した場合、並べ替えは入れ子になります。次のステートメントでは Production.Product テーブル内の行を並べ替えています。最初は製品サブカテゴリ別に降順で並べ替え、次に各製品サブカテゴリ内で ListPrice 別に昇順に並べ替えています。

USE AdventureWorks;
GO
SELECT ProductID, ProductSubcategoryID, ListPrice
FROM Production.Product
ORDER BY ProductSubcategoryID DESC, ListPrice

ORDER BY の正確な結果は、並べ替えられる列の照合順序に依存します。詳細については、「照合順序の使用」を参照してください。char、varchar、nchar、および nvarchar の列については、ORDER BY 操作の実行時に、テーブルまたはビューで定義されている列の照合順序とは異なる照合順序を適用することも指定できます。Windows 照合順序名または SQL 照合順序名を指定できます。たとえば、AdventureWorks データベース内の Person.Contact テーブルの LastName 列は Latin1_General 照合順序を使用して定義されていますが、次のスクリプトでは、Traditional_Spanish 照合順序の昇順で列が返されます。

USE AdventureWorks;
GO
SELECT LastName FROM Person.Contact
ORDER BY LastName
COLLATE Traditional_Spanish_ci_ai ASC
GO

ORDER BY は、データ型が text、ntext、image、または xml の列に対しては使用できません。また、ORDER BY リストでは、サブクエリ、集計、および定数式を使用できません。ただし、集計または式については、ユーザーが指定した名前を SELECT リストで使用できます。次に例を示します。

SELECT Color, AVG (ListPrice) AS 'average list price'
FROM Production.Product
GROUP BY Color
ORDER BY 'average list price'

ORDER BY では、クエリの最も外側の SELECT ステートメントについてのみ並べ替えた結果が保証されます。たとえば、次のビュー定義があるとします。

CREATE VIEW TopView AS 
SELECT TOP 50 PERCENT * FROM Person.Contact       
ORDER BY LastName       

次に、このビューをクエリします。

SELECT * FROM TopView       

ビュー定義には ORDER BY 句が 1 つ含まれていますが、その ORDER BY 句は TOP 句によって返される行を決定するためにだけに使用されます。SQL Server では、ビュー自体にクエリを実行する場合、次のクエリのように明示的に指定しない限り、結果が並べ替えられるかどうかが保証されません。

SELECT * FROM TopView       
ORDER BY LastName       

関連項目

概念