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
    정렬할 열을 지정합니다. 열 정렬은 이름이나 열 별칭으로 지정되거나 SELECT 목록에 있는 이름이나 별칭의 위치를 나타내는 음수가 아닌 정수로 지정될 수 있습니다. order_by_expression이 순위 함수에 표시된 경우에는 정수를 지정할 수 없습니다. 열 정렬에 식을 포함할 수 있지만 데이터베이스가 SQL Server (90) 호환성 모드이면 식은 상수로 확인할 수 없습니다. 열 이름과 별칭은 테이블이나 뷰 이름으로 정규화할 수 있습니다. SQL Server에서 정규화된 열 이름과 별칭은 FROM 절에 나열된 열로 확인됩니다. 정규화되지 않은 경우 order_by_expression 값은 SELECT 문에 나열된 모든 열에서 고유해야 합니다.

    여러 개의 열 정렬을 지정할 수 있습니다. ORDER BY 절에서 열 정렬의 순서가 정렬된 결과 집합의 구성 방식을 정의합니다.

    ORDER BY 절에는 SELECT 목록에는 나타나지 않은 항목이 포함될 수 있습니다. 그러나 SELECT DISTINCT를 지정하거나 문에 GROUP BY 절이 있거나 또는 SELECT 문에 UNION 연산자가 있으면 열 정렬이 SELECT 목록에 나타나야 합니다.

    또한 SELECT 문에 UNION 연산자가 있으면 첫 번째 SELECT 목록에서 지정된 열 이름이나 열 별칭을 사용해야 합니다.

    [!참고]

    ORDER BY 절에서는 ntext, text, image 또는 xml열을 사용할 수 없습니다.

  • COLLATE {collation_name}
    ORDER BY 작업이 collation_name에서 지정된 데이터 정렬에 따라 수행되도록 하고 테이블이나 뷰에서 정의된 대로 열의 데이터 정렬에 따라 수행되지는 않도록 지정합니다. 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 AdventureWorks
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 ;

두 열을 기준으로 정렬합니다. 이 쿼리는 먼저 FirstName 열을 기준으로 오름차순으로 정렬한 다음 LastName 열을 기준으로 내림차순으로 정렬합니다.

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