본문 바로가기
데이터베이스(DB)/SQLD

[SQLD 2-1-6] SQL 기본 - ORDER BY 절

by 송기동 2024. 5. 19.
728x90

1. ORDER BY 정렬

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

- 컬럼명 대신에 SELECT 절에서 사용한 ALIAS 명이나 컬럼 순서를 나타내는 정수도 사용 가능

- 별도로 정렬 방식을 지정하지 않으면 기본적으로 오름차순이 적용되며, SQL 문장의 제일 마지막에 위치한다.

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

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

- Oracle 에서는 NULL 값을 가장 큰 값으로 간주, 오름차순 정렬 시 가장 마지막에, 내림차순으로 정렬시 가장 먼저 위치

- SQL Server 에서는 NULL 값을 가장 작은값으로 간주, 오름차순 정렬 시 가장 먼저 위치

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

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

2. SELECT 문장 실행 순서


3. TOP N 쿼리

# ROWNUM

- Oracle에서 순위가 높은 N개의 로우를 추출하기 위해 ORDER BY 절과 WHERE 절의 ROWNUM 조건을 같이 사용하는 경우가 있는데 이 두 조건으로는 원하는 결과를 얻을 수 없다.
- ROWNUM 조건을 ORDER BY 절보다 먼저 처리되는 WHERE 절에서 처리하므로, 정렬 후 원하는 데이터를 얻기 위해서는 인라인 뷰에서 먼저 데이터 정렬을 수행한 후 메인쿼리에서 ROWNUM 조건을 사용해야 한다.

 

# 급여 순서에 상관없이 무작위로 추출된 3명에 한해 급여를 내림차순으로 정렬하는 SQLSELECT NAME, SAL
FROM EMP
WHERE ROWNUM < 4
ORDER BY SAL DESC;
# 급여가 많은 순서부터 정렬한 후, 상위 3건 데이터 출력하는 SQLSELECT NAME, SAL
FROM (
SELECT NAME, SAL
FROM EMP
ORDER BY SAL DESC
)
WHERE ROWNUM < 4;

 

# TOP ()

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

- TOP 절을 사용하여 결과 집합으로 반환되는 행 수를 제한할 수 있다.

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

# 급여 높은 2명을 내림차순으로 출력하되, 공동 2위가 있을 경우 추가로 데이터 출력
SELECT TOP (2) WITH TIES NAME, SAL 
FROM EMP
ORDER BY SAL DESC;
728x90