- 카테고리:
ORDER BY¶
SELECT 목록에서 결과 테이블의 행 순서를 지정합니다.
구문¶
특정 열을 기준으로 정렬
SELECT ...
FROM ...
ORDER BY orderItem [ , orderItem , ... ]
[ ... ]
여기서:
orderItem ::= { <column_alias> | <position> | <expr> } [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ]
모든 열을 기준으로 정렬
SELECT ...
FROM ...
ORDER BY ALL [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ]
[ ... ]
매개 변수¶
column_alias
쿼리 블록의 SELECT 목록에 나타나는 열 별칭입니다.
position
SELECT 목록에서 식의 위치입니다.
expr
현재 범위의 테이블에 대한 모든 식입니다.
{ ASC | DESC }
선택적으로 정렬 키 값을 오름차순(최저에서 최고) 또는 내림차순(최고에서 최저)으로 반환합니다.
기본값: ASC
NULLS { FIRST | LAST }
정렬 순서(ASC 또는 DESC)에 따라, NULL이 아닌 값 앞/뒤에 NULL 값이 반환되는지 여부를 선택적으로 지정합니다.
기본값: 정렬 순서(ASC 또는 DESC)에 따라 다릅니다. 자세한 내용은 아래의 사용법 노트를 참조하십시오.
ALL
SELECT 목록에 지정된 모든 열을 기준으로 결과를 정렬합니다. 결과는 표시되는 순서대로 열에 따라 정렬됩니다.
예를 들어 SELECT 목록에 다음이 포함된다고 가정해 보겠습니다.
SELECT col_1, col_2, col_3 FROM my_table ORDER BY ALL;
결과는
col_1
을 기준으로 먼저 정렬된 후col_2
,col_3
을 기준으로 차례로 정렬됩니다.참고
SELECT 목록의 열이 집계 함수를 사용하는 경우에는 ORDER BY ALL을 지정할 수 없습니다.
사용법 노트¶
모든 데이터는 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
절을 사용하지 마십시오.
예¶
다음 예제에서는 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 |
+---------+
NULLS를 첫 번째 또는 마지막으로 정렬¶
다음 예제에서는 DEFAULT_NULL_ORDERING 매개 변수를 LAST
로 설정하여 NULLS를 마지막에 정렬하도록 세션의 모든 쿼리를 구성합니다.
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 |
+---------+
다음 예제에서는 NULLS를 첫 번째로 정렬하기 위해 DEFAULT_NULL_ORDERING 매개 변수를 FIRST
로 설정합니다.
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 |
+---------+
SELECT 목록의 모든 열을 기준으로 정렬¶
이 섹션의 예제를 실행하려면 다음 테이블을 만듭니다.
CREATE OR REPLACE TABLE my_sort_example(a NUMBER, s VARCHAR, b BOOLEAN);
INSERT INTO my_sort_example VALUES
(0, 'abc', TRUE),
(0, 'abc', FALSE),
(0, 'abc', NULL),
(0, 'xyz', FALSE),
(0, NULL, FALSE),
(1, 'xyz', TRUE),
(NULL, 'xyz', FALSE);
다음 예제에서는 테이블의 모든 열을 기준으로 결과를 정렬합니다.
SELECT * FROM my_sort_example
ORDER BY ALL;
아래와 같이, 먼저 a
열을 기준으로 결과가 정렬된 다음, s
열, b
열을 기준으로(테이블에서 열이 정의된 순서대로) 차례로 정렬됩니다.
+------+------+-------+
| A | S | B |
|------+------+-------|
| 0 | abc | False |
| 0 | abc | True |
| 0 | abc | NULL |
| 0 | xyz | False |
| 0 | NULL | False |
| 1 | xyz | True |
| NULL | xyz | False |
+------+------+-------+
다음 예제에서는 결과를 오름차순으로 정렬합니다.
SELECT * FROM my_sort_example
ORDER BY ALL ASC;
+------+------+-------+
| A | S | B |
|------+------+-------|
| 0 | abc | False |
| 0 | abc | True |
| 0 | abc | NULL |
| 0 | xyz | False |
| 0 | NULL | False |
| 1 | xyz | True |
| NULL | xyz | False |
+------+------+-------+
다음 예제에서는 세션 중에 실행된 모든 쿼리에 대해 NULL 값을 마지막으로 정렬하기 위해 DEFAULT_NULL_ORDERING 매개 변수를 설정합니다.
ALTER SESSION SET DEFAULT_NULL_ORDERING = 'LAST';
SELECT * FROM my_sort_example
ORDER BY ALL;
+------+------+-------+
| A | S | B |
|------+------+-------|
| NULL | xyz | False |
| 0 | NULL | False |
| 0 | abc | NULL |
| 0 | abc | False |
| 0 | abc | True |
| 0 | xyz | False |
| 1 | xyz | True |
+------+------+-------+
다음 예제에서는 해당 설정을 재정의하는 쿼리에서 NULLS FIRST를 지정합니다.
SELECT * FROM my_sort_example
ORDER BY ALL NULLS FIRST;
+------+------+-------+
| A | S | B |
|------+------+-------|
| NULL | xyz | False |
| 0 | NULL | False |
| 0 | abc | NULL |
| 0 | abc | False |
| 0 | abc | True |
| 0 | xyz | False |
| 1 | xyz | True |
+------+------+-------+
다음 예제에서는 b
, s
및 a
순서로 열을 반환합니다. 먼저 b``를 기준으로 결과가 정렬된 다음, ``s
, ``a``을 기준으로 차례로 정렬됩니다.
SELECT b, s, a FROM my_sort_example
ORDER BY ALL NULLS LAST;
+-------+------+------+
| B | S | A |
|-------+------+------|
| False | abc | 0 |
| False | xyz | 0 |
| False | xyz | NULL |
| False | NULL | 0 |
| True | abc | 0 |
| True | xyz | 1 |
| NULL | abc | 0 |
+-------+------+------+