카테고리:

쿼리 구문

ORDER BY

SELECT 목록에서 결과 테이블의 행 순서를 지정합니다.

구문

SELECT ...
FROM ...
ORDER BY orderItem [ , orderItem , ... ]
[ ... ]
여기서:
orderItem ::= { <column_alias> | <position> | <expr> } [ ASC | DESC ] [ NULLS { FIRST | LAST } ]
column_alias

쿼리 블록의 SELECT 목록에 나타나는 열 별칭입니다.

position

SELECT 목록에서 식의 위치입니다.

expr

현재 범위의 테이블에 대한 모든 식입니다.

ASC | DESC

선택적으로 정렬 키 값을 오름차순(최저에서 최고) 또는 내림차순(최고에서 최저)으로 반환합니다.

기본값: ASC

NULLS FIRST | LAST

정렬 순서(ASC 또는 DESC)에 따라, NULL이 아닌 값 앞/뒤에 NULL 값이 반환되는지 여부를 선택적으로 지정합니다.

기본값: 정렬 순서(ASC 또는 DESC)에 따라 다릅니다. 자세한 내용은 아래의 사용법 노트를 참조하십시오.

사용법 노트

  • 모든 데이터는 ASCII 테이블에 있는 각 문자의 숫자 바이트 값에 따라 정렬됩니다. UTF-8 인코딩이 지원됩니다.

  • 숫자 값의 경우, 소수점 앞의 선행 영(0)과 소수점 뒤의 후행 영(0)은 정렬 순서에 영향을 주지 않습니다.

  • 달리 지정하지 않는 한, NULL 값은 NULL이 아닌 값보다 높은 것으로 간주됩니다. 결과적으로 NULL의 순서는 정렬 순서에 따라 달라집니다.

    • 정렬 순서가 ASC 인 경우, NULL이 마지막에 반환됩니다. NULL이 첫 번째가 되도록 하려면 NULLS FIRST 를 사용하십시오.

    • 정렬 순서가 DESC 인 경우, NULL이 먼저 반환됩니다. NULL이 마지막이 되도록 하려면 NULLS LAST 를 사용하십시오.

  • ORDER BY는 쿼리의 다양한 수준에서 사용할 수 있습니다(예: 하위 쿼리 또는 OVER() 하위 절 내부). 하위 쿼리 또는 하위 절 내의 ORDER BY는 해당 하위 쿼리 또는 하위 절 내에서만 적용됩니다. 예를 들어, 다음 쿼리의 ORDER BY는 쿼리의 가장 바깥쪽 수준이 아니라 하위 쿼리 내에서만 결과를 정렬합니다.

    select * 
        from (
             select branch_name
                 from branch_offices
                 ORDER BY monthly_sales DESC
                 limit 3
             )
        ;
    

    이 예에서는 하위 쿼리에 ORDER BY가 지정되어 있으므로 하위 쿼리는 월별 매출 순으로 이름을 반환합니다. 하위 쿼리의 ORDER BY는 외부 쿼리에 적용되지 않습니다. 이 쿼리는 월별 매출이 가장 높았던 세 지점의 이름을 반환하지만, 반드시 월별 매출을 기준으로 정렬하는 것은 아닙니다.

    정렬은 비용이 많이 들 수 있습니다. 외부 쿼리의 결과를 정렬하려는 경우, 쿼리의 최상위 수준에서만 ORDER BY 절을 사용하고, 필요한 경우가 아니면 하위 쿼리에서 ORDER BY 절을 사용하지 마십시오.

문자열의 정렬 순서 예:

SELECT column1
FROM VALUES ('a'), ('1'), ('B'), (null), ('2'), ('01'), ('05'), (' this'), ('this'), ('this and that'), ('&'), ('%')
ORDER BY column1;

+---------------+
| COLUMN1       |
|---------------|
|  this         |
| %             |
| &             |
| 01            |
| 05            |
| 1             |
| 2             |
| B             |
| a             |
| this          |
| this and that |
| NULL          |
+---------------+

숫자의 정렬 순서 예:

SELECT column1
FROM VALUES (3), (4), (null), (1), (2), (6), (5), (0005), (.05), (.5), (.5000)
ORDER BY column1;

+---------+
| COLUMN1 |
|---------|
|    0.05 |
|    0.50 |
|    0.50 |
|    1.00 |
|    2.00 |
|    3.00 |
|    4.00 |
|    5.00 |
|    5.00 |
|    6.00 |
|    NULL |
+---------+

NULL 값의 정렬 순서 예:

SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1;

+---------+
| COLUMN1 |
|---------|
|       1 |
|       2 |
|       3 |
|    NULL |
|    NULL |
+---------+

SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1 NULLS FIRST;

+---------+
| COLUMN1 |
|---------|
|    NULL |
|    NULL |
|       1 |
|       2 |
|       3 |
+---------+

SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1 DESC;

+---------+
| COLUMN1 |
|---------|
|    NULL |
|    NULL |
|       3 |
|       2 |
|       1 |
+---------+

SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1 DESC NULLS LAST;

+---------+
| COLUMN1 |
|---------|
|       3 |
|       2 |
|       1 |
|    NULL |
|    NULL |
+---------+
맨 위로 이동