본문 바로가기

DataBase

[DataBase] ORDER BY

ORDER BY

 -  SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 컬럼을 기준으로 정렬하여 출력하는 데에 사용한다.

 -  컬럼명, SELECT 절에서 사용한 ALIAS 명, 컬럼 순서를 나타내는 정수로 순서를 지정한다.

 -  ASC 오름차순(DEFAULT, 생략가능), DESC 내림차순

 -  ORACLE의 경우 NULL 값을 가장 큰 값으로 취급하여 내림차순 정렬 시 NULL이 가장 먼저 조회된다.

 -  날짜형 데이터 타입의 경우 오름차순 정렬 시, 가장 빠른 값이 먼저 출력된다. (2019.01.01이 2019.12.30보다 먼저)

 

1

2

3

4

5

6

SELECT  컬럼명 [ALIAS명]

   FROM  테이블명

[WHERE  조건식]

[GROUP BY  컬럼이나 표현식]

[HAVING  그룹조건식]

[ORDER BY  컬럼이나 표현식 [ASC 또는 DESC]];

 

# 컬럼명, ALIAS명으로 정렬

 -  테이블명 : PLAYER

 -  컬럼명[ALIAS] : PLAYER_NAME[선수명], POSITION[포지션], BACK_NO[백넘버]

 -  PLAYER 테이블에서 전체 컬럼을 조회하고, 포지션 내림차순으로 출력

SELECT *

   FROM PLAYER

ORDER BY POSITON DESC;

SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버

   FROM PLAYER

ORDER BY 포지션 DESC;

 

# 여러가지 컬럼을 기준으로 정렬

 -  테이블명 : PLAYER

 -  컬럼명[ALIAS] : PLAYER_NAME[선수명], POSITION[포지션], BACK_NO[백넘버], HEIGHT[키]

 -  PLAYER테이블에서 키가 큰 순서대로, 키가 같은 경우 백넘버 순으로 정렬하며, 키가 NULL인 경우는 제외

SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

   FROM PLAYER

 WHERE HEIGHT IS NOT NULL

 ORDER BY HEIGHT DESC, BACK_NO;

 

# 컬럼 순서를 기준으로 정렬

 -  테이블명 : PLAYER

 -  컬럼명[ALIAS] : PLAYER_NAME[선수명], POSITION[포지션], BACK_NO[백넘버]

 -  PLAYER테이블에서 백넘버 내림차순, 포지션 오름차순, 선수명 오름차순

 ※ 컬럼명이 길거나 정렬조건이 많은 경우 편리하게 사용할 수 있으나, 향후 유지보수성이나 가독성이 떨어지므로 주의해야 한다.

SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버

   FROM PLAYER

ORDER BY 3 DESC, 2, 1;

 

# 특정 데이터 우선 정렬(임의 정렬)

 -  테이블명 : PLAYER

 -  컬럼명[ALIAS] : PLAYER_NAME[선수명], POSITION[포지션], BACK_NO[백넘버]

 -  포지션이 GK인 선수 우선 정렬(포지션 : FW, GK, MF, DF, ...)

SELECT *,

                 CASE WHEN POSITION = 'GK' THEN '1'

                              ELSE '2'

                   END AS POSITION_PRIORITY

   FROM PLAYER

ORDER BY POSITION_PRIORITY;