SQL Order By (DB2)

박상수
3 min readSep 19, 2019

--

정렬 관련해서 찾아보다가 기초지만 다시 정리

현재 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]

참고

--

--

No responses yet