[ SQLD : II. SQL 기본 및 활용] 1-8. ORDER BY 절

문지은·2023년 6월 7일
0

SQLD

목록 보기
18/30
post-thumbnail

[SQLD 시험 대비] 2과목. SQL 기본 및 활용 : 1장. SQL 기본 - 8. ORDER BY 절

ORDER BY 절

Order By 정렬

  • SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 칼럼을 기준으로 정렬하여 출력하는데 사용
  • ORDER BY 절에 칼럼(Column)명 대신에 SELECT 절에서 사용한 ALIAS 명이나 칼럼 순서를 나타내는 정수도 사용 가능
  • 별도로 정렬 방식을 지정하지 않으면 기본 적으로 오름차순이 적용되며, SQL 문장의 제일 마지막에 위치한다.
SELECT 칼럼명 [ALIAS명]
FROM 테이블명
[WHERE 조건식]
[GROUP BY 칼럼(Column)이나 표현식] [HAVING 그룹조건식]
[ORDER BY 칼럼(Column)이나 표현식 [ASC 또는 DESC]] ; 
  • ASC(Ascending) : 조회한 데이터를 오름차순으로 정렬한다.
    • 기본 값이므로 생략 가능
  • DESC(Descending) : 조회한 데이터를 내림차순으로 정렬한다.

예제

  • ORDER BY 절의 예로 선수 테이블에서 선수들의 이름, 포지션, 백넘버를 출력하는데 사람 이름을 내림차순으로 정렬하여 출력해보자.
SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버 
FROM PLAYER
ORDER BY PLAYER_NAME DESC;

ORDER BY 절 사용 특징

  • 기본적인 정렬 순서는 오름차순(ASC)이다.
  • 숫자형 데이터 타입은 오름차순으로 정렬했을 경우에 가장 작은 값부터 출력된다.
  • 날짜형 데이터 타입은 오름차순으로 정렬했을 경우 날짜 값이 가장 빠른 값이 먼저 출력 된다. 예를 들어 ‘01-JAN-2012’는 ‘01-SEP-2012’보다 먼저 출력된다.
  • Oracle에서는 NULL 값을 가장 큰 값으로 간주하여 오름차순으로 정렬했을 경우에는 가 장 마지막에, 내림차순으로 정렬했을 경우에는 가장 먼저 위치한다.
  • 반면, SQL Server에서는 NULL 값을 가장 작은 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 먼저, 내림차순으로 정렬했을 경우에는 가장 마지막에 위치한다.

예제

  • 이번에는 한 개의 칼럼이 아닌 여러 가지 칼럼(Column)을 기준으로 정렬해보자.
  • 먼저 키가 큰 순서대로, 키가 같은 경우 백넘버 순으로 ORDER BY 절을 적용하여 SQL 문장을 작성 하는데, 키가 NULL인 데이터는 제외한다.
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 
FROM PLAYER
WHERE HEIGHT IS NOT NULL
ORDER BY HEIGHT DESC, BACK_NO;

SELECT 문장 실행 순서

GROUP BY 절과 ORDER BY가 같이 사용될 때 SELECT 문장은 6개의 절로 구성이 되고, SELECT 문장의 수행 단계는 아래와 같다.

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

TOP N 쿼리

ROWNUM

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

예제

  • 사원 테이블에서 급여가 높은 3명만 내림차순으로 출력해보자.
  • 아래와 같이 작성하면 급여가 상위인 3명을 출력한 것이 아니라, 급여 순서에 상관없이 무작위로 추출된 3명에 한해서 급여를 내림차순하게 된다.
SELECT ENAME, SAL 
FROM EMP
WHERE ROWNUM <4 
ORDER BY SAL DESC;
  • Oracle은 ROWNUM 조건을 ORDER BY 절보다 먼저 처리되는 WHERE 절에서 처리하므로, 정렬 후 원하는 데 이터를 얻기 위해서는 인라인 뷰에서 먼저 데이터 정렬을 수행한 후 메인쿼리에서 ROWNUM 조건을 사용해야 한다.
SELECT ENAME, SAL
FROM (SELECT ENAME, SAL
	  FROM EMP
      ORDER BY SAL DESC) 
WHERE ROWNUM <4 ;

TOP()

  • SQL Server는 TOP 조건을 사용하게 되면 별도 처리 없이 관련 Order By 절의 데이터 정렬 후 원하는 일부 데이터만 쉽게 출력할 수 있다.
TOP (Expression) [PERCENT] [WITH TIES]
  • TOP 절을 사용하여 결과 집합으로 반환되는 행 수를 제한할 수 있다.
  • WITH TIES 옵션은 ORDER BY 절의 조건 기준으로 TOP N의 마지막 행으로 표시되는 추가 행의 데이터가 같을 경우 동일 정렬 순서 데이터를 추가 반환하도록 지정하는 옵션이다.

예제

  • 사원 테이블에서 급여가 높은 2명을 내림차순으로 출력해보자.
SELECT TOP(2) ENAME, SAL 
FROM EMP
ORDER BY SAL DESC;
  • WITH TIES 옵션을 통해 같은 급여를 받는 사원은 같이 출력되도록 할 수 있다.
SELECT TOP(2) WITH TIES ENAME, SAL 
FROM EMP
ORDER BY SAL DESC;
profile
코드로 꿈을 펼치는 개발자의 이야기, 노력과 열정이 가득한 곳 🌈

0개의 댓글