본문 바로가기

[DB]DataBase/[SQL]

[SQLD] ORDER BY절

728x90
반응형

ORDER BY절

  • 데이터는 입력된 순서로 출력되나, 출력되는 행의 순서를 사용자가 변경하고자 할 때 ORDER BY절을 사용
  • ORDER BY 뒤에 명시된 컬럼 순서로 정렬
    • 1차 정렬, 2차 정렬 전달 가능
  • 정렬 순서를 오름차순(ASC: Ascending), 내림차순(DESC: Descending)으로 전달
    • 생략 시 오름차순 정렬이 default
  • 유일하게 SELECT절에 정의한 컬럼 별칭 사용 가능
    • SELECT절 보다 늦게 수행되는 구문은 ORDER BY절 뿐이므로 ORDER BY절만 SELECT에서 정의한 컬럼 별칭 사용 가능
  • SELECT절에 선언된 순서대로의 숫자로도 사용 가능

ORDER BY절 특징

  • 기본적인 정렬 순서는 오름차순(ASC)이다.
  • 숫자형 데이터 타입은 오름차순으로 정렬할 경우 가장 작은 값부터 출력된다.
  • 날짜형 데이터 타입은 오름차순으로 정렬할 경우 날짜 값이 가장 이른 값이 먼저 출력된다.
  • 오라클에서는 NULL 값을 가장 큰 값으로 간주하여 오름차순으로 정렬할 경우 가장 마지막에, 내림차순으로 정렬할 경우 가장 먼저 위치한다.
  • 반면 SQL Server에서는 NULL 값을 가장 작은 값으로 간주하여 오름차순으로 정렬할 경우 가장 먼저, 내림차순으로 정렬할 경우 가장 마지막에 위치한다.

실행 순서

SELECT 칼럼명 [ALIAS명]
FROM 테이블명
[WHERE 조건식]
[GROUP BY 칼럼이나 표현식]
[HAVING 그룹조건식]
[ORDER BY 칼럼이나 표현식 [ASC 또는 DESC]]
;

GROUP BY절과 ORDER BY절이 같이 사용될 때 SELECT 문장은 6개의 절로 구성되고,

SELECT 문장의 수행 단계는 아래와 같다.

  1. FROM
    1. 발췌 대상 테이블을 참조한다.
  2. WHERE
    1. 발췌 대상 데이터가 아닌 것은 제거한다.
  3. GROUP BY
    1. 행들을 소그룹화 한다.
  4. HAVING
    1. 그룹핑된 값의 조건에 맞는 것만 출력한다.
  5. SELECT
    1. 데이터 값을 출력/계산 한다.
  6. ORDER BY
    1. 데이터를 정렬한다.

위 순서는 옵티마이저가 SQL 문장의 syntax, semantic 에러를 점검하는 순서이기도 하다.

예를 들어서 FROM절에 정의되지 않은 테이블의 컬럼을 WHERE절, GROUP BY절, HAVING절 SELECT절, ORDER BY절에서 사용하면 에러가 발생한다.

그러나 ORDER BY절에는 SELECT 목록에 나타나지 않은 문자형 항목이 포함될 수 있다.

단, SELECT DISTINCT를 지정하거나 SQL 문장에 GROUP BY절이 있거나 또는 SELECT문에 UNION 연산자가 있으면 열 정의가 SELECT 목록에 표시되어야 한다.

이 부분은 관계형 데이터베이스가 데이터를 메모리에 올릴 때 행 단위로 모든 컬럼을 가져오게 되므로 SELECT 절에서 일부 컬럼만 선택하더라도 ORDER BY 절에서 메모리에 올라와 있는 다른 컬럼의 데이터를 사용할 수 있다.

정렬 순서 (오름차순 정렬 시)

  • 한글
    • 가, 나, 다 순
  • 영어
    • A, B, C 순
  • 숫자
    • 1, 2, 3 순
  • 날짜
    • 과거 날짜 ~ 최근 날짜 순

복합 정렬

먼저 정렬한 값에 동일한 결과가 있을 경우 추가적으로 정렬

(1차 정렬한 값이 같은 경우 그 값 안에서 2차 정렬이 일어남)

 

예제

SELECT JOB 
FROM EMP 
GROUP BY JOB 
HAVING COUNT(*) > 0 
ORDER BY MAX(EMPNO), MAX(MGR), SUM(SAL), COUNT(DEPTNO), MAX(HIREDATE)
;

 

EMP 테이블을 직무(JOB)별로 그룹화하고 지정된 기준에 따라 정렬하여 제공

 

SELECT SQL에서 GROUP BY절이 사용되었기 때문에 SELECT 절에 정의하지 않은 MAX, SUM, COUNT와 같은 집계 함수도 ORDER BY절에서 사용할 수 있다.

GROUP BY절에서 기준을 정의하게 되면 데이터베이스는 일반적으로 SELECT 문장 처럼 FROM절에 정의된 테이블 구조를 그대로 가지고 가는 것이 아니라, GROUP BY절 그룹핑 기준에 사용된 컬럼집계 함수에 사용될 수 있는 숫자형 데이터 컬럼들의 집합을 새로 만든다.

반응형

'[DB]DataBase > [SQL]' 카테고리의 다른 글

[SQLD] 순수 관계 연산자  (0) 2024.05.03
[SQLD] JOIN 조인  (0) 2024.05.02
[SQLD] GROUP BY, HAVING절  (0) 2024.04.27
[SQLD] WHERE절  (0) 2024.04.25
[SQLD] 함수  (0) 2024.04.23