Notice
Recent Posts
Recent Comments
05-13 01:46
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

-

[SQLD] #019 SQL 기본 - ORDER BY 절 본문

SQLD

[SQLD] #019 SQL 기본 - ORDER BY 절

choiht 2021. 5. 5. 19:17
반응형

목차

1. ORDER BY 정렬

2. SELECT 문장 실행 순서

3. Top N 쿼리

 

 

 


 

 

1. ORDER BY 정렬

ORDER BY 절은 SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 칼럼을 기준으로 정렬하여 출력하는데 사용한다. 별도로 정렬 방식을 지정하지 않으면 기본적으로 오름차순이 적용되며, SQL 문장의 제일 마지막에 위치한다. 

 

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

ASC : 조회한 데이터를 오름차순으로 정렬한다. (기본값이므로 생략 가능)

DESC : 조회한 데이터를 내림차순으로 정렬한다. 

 

 

 

ORBER BY 절의 특징은 다음과 같다. 

- 기본적인 정렬 순서는 오름차순이다. 

- 숫자형 데이터 타입은 오름차순으로 정렬했을 경우에 가장 작은 값부터 출력된다. 

- 날짜형 데이터 타입은 오름차순으로 정렬했을 경우 날짜 값이 가장 빠른 값이 먼저 출력된다.

- Oracle 에서는 NULL 값을 가장 큰 값으로 간주하여 오름차순 기준 가장 마지막에 위치시킨다. 

- 반대로 SQL Server 에서는 NULL 값을 가장 작은 값으로 간주한다. 

 

 

 

 

 

 

 

 

 

 

 

 

2. SELECT 문장 실행 순서

5    SELECT 칼럼명 [ALIAS명]
1    FROM 테이블명
2    WHERE 조건식
3    GROUP BY 칼럼 또는 표현식
4    HAVING 그룹조건식
6    ORDER BY 칼럼 또는 표현식

 

위의 내용을 글로 정리하면 다음과 같다. 

1. 발췌 대상 테이블을 참조한다. (FROM)

2. 발췌 대상 데이터가 아닌 것은 제거한다. (WHERE)

3. 행들을 소그룹화 한다. (GROUP BY)

4. 그룹핑된 값의 조건에 맞는 것만 출력한다. (HAVING)

5. 데이터 값을 출력/계산한다. (SELECT)

6. 데이터들을 정렬한다. (ORDER BY)

 

 

GROUP BY 절에서 그룹핑 기준을 정의하게 되면 데이터베이스는 일반적인 SELECT 문장처럼 FROM 절에 정의된 테이블 구조를 그대로 가지고 가는 것이 아니라, GROUP BY 절의 그룹핑 기준에 사용된 칼럼과 집계 함수에 사용될 숫자형 데이터 칼럼의 집합을 새로 만든다. 이 때 개별 데이터는 필요하지 않기 때문에 저장하지 않는다. 따라서 GROUP BY 이후 수행절인 SELECT 절이나 ORDER BY 절에서 개별 데이터를 사용하는 경우 에러가 발생한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Top N 쿼리

1. ROWNUM

Oracle 에서 순위가 높은 N개의 로우를 추출하기 위해 ORDER BY 절과 WHERE 절의 ROWNUM 조건을 같이 사용하는 경우가 있는데, 이 두 조건으로는 원하는 결과를 얻을 수 없다. Oracle의 경우 정렬이 완료된 후 데이터의 일부가 출력되는 것이 아니라, 데이터의 일부가 먼저 추출된 후 데이터에 대한 정렬 작업이 일어나므로 주의해야한다. 

 

 

예제) 사원 테이블에서 급여가 높은 3명만 내림차순으로 출력하고자 한다. 

-- 잘못된 사례
SELECT ENAME, SAL 
FROM EMP 
WHERE ROWNUM < 4
ORDER BY SAL DESC;


-- 올바른 사례
SELECT ENAME, SAL
FROM (SELECT ENAME, SAL FROM EMP ORDER BY SAL DESC)
WHERE ROWNUM < 4;

첫번째 잘못된 사례에서는 급여가 상위인 3명을 출력한 것이 아니라 급여 순서에 상관없이 무작위로 추출된 3명에 한해서 급여를 내림차순으로 정렬한 결과이다. 

두번째 사례에서는 인라인 뷰를 사용하여 추출하고자 하는 부분을 정렬한 후 ROWNUM 을 적용시킴으로써 결과에 참여하는 순서와 추출되는 로우의 순서를 일치시키고, Top N 쿼리의 결과를 만들어냈다. 

 

 

 

 

2. TOP()

반면 SQL Server는 TOP 조건을 사용하게 되면 별도 처리 없이 ORDER BY 절의 데이터를 정렬 후 원하는 일부 데이터만 쉽게 출력할 수 있다. 

TOP (Expression) [PERCENT] [WITH TIES]

WITH TIES 옵션 : ORDER BY 절의 조건 기준으로 TOP N의 마지막 행으로 표시되는 추가 행의 데이터가 같을 경우 N+동일 정렬 순서 데이터를 추가 반환하도록 지정한다. 

 

 

 

 

 

 

 


출처
이 글의 내용은 모두 한국데이터베이스진흥원이 출판한 SQL 전문가 가이드 2013 Edition을 기본으로 한다.

 

 

 

반응형

'SQLD' 카테고리의 다른 글

[SQLD] #021 SQL 활용 - 표준 조인  (0) 2021.05.06
[SQLD] #020 SQL 기본 - JOIN  (0) 2021.05.06
[SQLD] #018 SQL 기본 - GROUP BY, HAVING 절  (0) 2021.05.04
[SQLD] #017 SQL 기본 - 함수  (2) 2021.05.03
[SQLD] #016 SQL 기본 - WHERE  (0) 2021.05.03
Comments