- 카테고리:
ORDER BY¶
SELECT 목록에서 결과 테이블의 행 순서를 지정합니다.
구문¶
SELECT ...
FROM ...
ORDER BY orderItem [ , orderItem , ... ]
[ ... ]
여기서:
orderItem ::= { <column_alias> | <position> | <expr> } [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ]
매개 변수¶
column_alias쿼리 블록의 SELECT 목록에 나타나는 열 별칭입니다.
positionSELECT 목록에서 식의 위치입니다.
expr현재 범위의 테이블에 대한 모든 식입니다.
{ ASC | DESC }선택적으로 정렬 키 값을 오름차순(최저에서 최고) 또는 내림차순(최고에서 최저)으로 반환합니다.
기본값: ASC
NULLS { FIRST | LAST }정렬 순서(ASC 또는 DESC)에 따라, NULL이 아닌 값 앞/뒤에 NULL 값이 반환되는지 여부를 선택적으로 지정합니다.
기본값: 정렬 순서(ASC 또는 DESC)에 따라 다릅니다. 자세한 내용은 아래의 사용법 노트를 참조하십시오.
사용법 노트¶
모든 데이터는 ASCII 테이블에 있는 각 문자의 숫자 바이트 값에 따라 정렬됩니다. UTF-8 인코딩이 지원됩니다.
숫자 값의 경우, 소수점 앞의 선행 영(0)과 소수점 뒤의 후행 영(
0)은 정렬 순서에 영향을 주지 않습니다.NULLS FIRST 또는 NULLS LAST 를 지정하지 않은 경우 NULL 값의 순서는 DEFAULT_NULL_ORDERING 매개 변수의 설정과 정렬 순서에 따라 달라집니다.
정렬 순서가 ASC (기본값)이고 DEFAULT_NULL_ORDERING 매개 변수가
LAST(기본값)로 설정된 경우 NULL 값이 마지막에 반환됩니다. 따라서 별도로 지정하지 않는 한 NULL 값은 NULL 값이 아닌 값보다 높은 것으로 간주됩니다.정렬 순서가 ASC 이고 DEFAULT_NULL_ORDERING 매개 변수가
FIRST로 설정된 경우 NULL 값이 먼저 반환됩니다.정렬 순서가 DESC 이고 DEFAULT_NULL_ORDERING 매개 변수가
FIRST로 설정된 경우 NULL 값이 마지막에 반환됩니다.정렬 순서가 DESC 이고 DEFAULT_NULL_ORDERING 매개 변수가
LAST로 설정된 경우 NULL 값이 먼저 반환됩니다.
서로 다른 데이터 타입의 요소를 포함하는 배열과 같은 반정형 데이터의 경우 서로 다른 데이터 타입의 값에 대해 정렬 순서가 일관되게 보장되지 않습니다.
Top-K 정리는 LIMIT 및 ORDER BY 절을 모두 포함하는 쿼리의 성능을 향상시킬 수 있습니다. 자세한 내용은 쿼리 성능 향상을 위한 Top-K 정리 섹션을 참조하십시오.
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 |
+---------+
DEFAULT_NULL_ORDERING 매개 변수가 LAST (기본값)로 설정된 NULL 값에 대한 정렬 순서 예제입니다.
ALTER SESSION SET DEFAULT_NULL_ORDERING = 'LAST';
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 DESC;
+---------+
| COLUMN1 |
|---------|
| NULL |
| NULL |
| 3 |
| 2 |
| 1 |
+---------+
이 예에서는 NULLS FIRST 매개 변수가 DEFAULT_NULL_ORDERING 매개 변수 설정을 재정의하는 것을 보여줍니다.
SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1 NULLS FIRST;
+---------+
| COLUMN1 |
|---------|
| NULL |
| NULL |
| 1 |
| 2 |
| 3 |
+---------+
DEFAULT_NULL_ORDERING 매개 변수가 FIRST 로 설정된 NULL 값에 대한 정렬 순서 예제입니다.
ALTER SESSION SET DEFAULT_NULL_ORDERING = 'FIRST';
SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1;
+---------+
| COLUMN1 |
|---------|
| NULL |
| NULL |
| 1 |
| 2 |
| 3 |
+---------+
SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1 DESC;
+---------+
| COLUMN1 |
|---------|
| 3 |
| 2 |
| 1 |
| NULL |
| NULL |
+---------+
이 예에서는 NULLS LAST 매개 변수가 DEFAULT_NULL_ORDERING 매개 변수 설정을 재정의하는 것을 보여줍니다.
SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1 NULLS LAST;
+---------+
| COLUMN1 |
|---------|
| 1 |
| 2 |
| 3 |
| NULL |
| NULL |
+---------+