ORDER BY 句 (Transact-SQL)

SELECT ステートメントで返される列で使用される並べ替え順を指定します。TOP を同時に指定しない場合、ビュー、インライン関数、派生テーブル、およびサブクエリでは ORDER BY 句は無効になります。

注意

ビュー、インライン関数、派生テーブル、またはサブクエリの定義で ORDER BY を使用する場合、この句は TOP 句で返される行の特定にのみ使用されます。クエリ自体にも ORDER BY を指定しない限り、これらの構造をクエリしたときに、ORDER BY 句で順序どおりの結果が得られるかどうかは保証されません。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

[ ORDER BY 
    {
    order_by_expression 
  [ COLLATE collation_name ] 
  [ ASC | DESC ] 
    } [ ,...n ] 
] 

引数

  • order_by_expression
    並べ替えのキーとなる列を指定します。並べ替え列は、列の名前、列の別名、または選択リスト内の名前や別名の位置を示す負以外の整数で指定できます。順位付け関数に order_by_expression が使用されている場合、整数値は指定できません。並べ替え列に式を含めることはできますが、データベースが SQL Server (90) 互換性モードの場合は、式を定数に解決することはできません。列の名前と別名は、テーブル名またはビュー名で修飾できます。SQL Server では、修飾された列名および別名は、FROM 句で指定される列に解決されます。order_by_expression が修飾されていない場合、値は SELECT ステートメントに一覧表示されているすべての列で一意である必要があります。

    キーとなる列は複数指定できます。ORDER BY 句内に記述するキー列の並び順によって、並べ替えられた結果セットの構成が決まります。

    ORDER BY 句には、選択リストにない項目を指定できますが、SELECT DISTINCT を指定する場合、ステートメントに GROUP BY 句を含める場合、または SELECT ステートメントに UNION 演算子を含める場合は、選択リストに並べ替え列を指定する必要があります。

    これに加えて、SELECT ステートメントで UNION 演算子を使用する場合は、列の名前または別名が、最初の選択リストに指定されている必要があります。

    注意

    ORDER BY 句では、ntext、text、image、または xml 型の列は使用できません。

  • COLLATE {collation_name}
    テーブルまたはビューで定義した列の照合順序ではなく、collation_name で指定した照合順序に従って ORDER BY 操作を実行します。collation_name には、Windows 照合順序名と SQL 照合順序名のいずれかを指定できます。詳細については、「セットアップでの照合順序の設定」および「SQL Server 照合順序の使用」を参照してください。COLLATE は、char、varchar、nchar、nvarchar 型の列にのみ適用できます。

  • ASC
    指定した列の値が昇順、つまり小さい値から大きい値へと並べ替えられます。ASC は既定の並べ替え順です。

  • DESC
    指定した列の値が降順、つまり大きい値から小さい値へと並べ替えられます。

説明

NULL 値は最小値として扱われます。

ORDER BY 句の中の項目数に制限はありませんが、並べ替えの処理を行うために必要な中間の作業テーブルの行サイズには、8,060 バイトという制限があります。これを基に、ORDER BY 句に指定できる列全体のサイズが制限されます。

別のソースから行を挿入するときに、ORDER BY 句を SELECT...INTO ステートメントと共に使用する場合、行が指定した順序どおりに挿入されるかどうかは保証されません。

次の例では、結果セットの順序付けを示します。

数値の ProductID 列による順序付けです。既定は昇順です。

USE AdventureWorks2008R2;
GO
SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID ;

数値の ProductID 列による降順の順序付けです。

SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;

Name 列による順序付けです。文字は数字ではなくアルファベット順に並べ替えられます。つまり、10 の位置は、2 の前になります。

SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC ;

2 つの列による順序付けです。このクエリでは、FirstName 列で昇順に並べ替えを行ってから、LastName 列で降順に並べ替えを行います。

SELECT LastName, FirstName FROM Person.Person
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC ;