정렬 관련해서 찾아보다가 기초지만 다시 정리
현재 DB2 프로젝트를 하고 있기에 이를 기반으로 정리
*기본 정렬 문법은 안다는 가정하에
Order By
- SELECT 문을 사용 할때 Row의 순서는 지정되지 않는다.
하나 이상의 열에 있는 결과를 정렬하려면 Order By를 사용하면 된다.
구조
- 기본적으로 SELECT 문에서 Order by는 아래와 같은 구조로 선언된다.
SELECT (2)
columns
FROM (1)
table
ORDER BY (3)
(columns or expression) [ASC or DESC, default: ASC],
...;
위 SQL문의 실행 순서는 다음과 같다.
- Order by 절과 함께 Select 문을 평가할때 DB2는
FROM-> SELECT->Order by 순으로 평가를 한다. - order by절에서 ASC 혹은 DESC를 선언하지 않았을 시 ASC를 Default다.
정렬순서
아래와 같은 데이터에서 식이 있다고 하자.
[정렬 전]
----------------------
| col1 | col2 | col3 |
----------------------
| 1 | A | Z |
| 1 | B | Z |
| 2 | C | Z |
| 3 | D | Z |
| 3 | E | Z |
----------------------[SQL실행]
SELECT
col1,
col2,
col3
FROM
table
ORDER BY
col1, col2 DESC;[정렬 후]
----------------------
| col1 | col2 | col3 |
----------------------
| 1 | B | Z |
| 1 | A | Z |
| 2 | C | Z |
| 3 | E | Z |
| 3 | D | Z |
----------------------
- 위 결과는 다음과 같다.
- col1은 ASC정렬이기에 변함없이 동일하게 정렬되었다.
- col2 는 col1을 기준으로 같은 값에 대하여 DESC(내림차순) 이 실행되었다.
정렬에서 NULL처리
- 오라클 혹은 DB2에는 NULLS ( FIRST or LAST) 문법이 존재한다.
- ORDER BY col1 ASC NULLS [FIRST | LAST]
SELECT
col1,
col2,
col3
FROM
table
ORDER BY
col1 ASC NULLS FIRST, col2 DESC NULLS LAST;
- MYSQL에서는 문법의 형태가 약간 다르다.
- order by col1 is null [ASC | DESC], col1 [ASC | DESC]