본문 바로가기
공부/Oracle

오라클 SQL 문법 공부3 - ORDER BY 절과 처리순서

by 리빈아빠 2017. 9. 16.
반응형

서론

이번에는 ORDER BY와 쿼리문장의 처리 순서에 대해서 알아볼까 한다. 1~3번째 내용만 잘 익혀놓아도 실습하는데 있어서 크게 문제가 없을 것이다. 이 쿼리 문장의 처리 순서를 잘 알게 되면 추후에 튜닝할때 특히 더 도움이 될 것 같다.

본론

ORDER BY

아주 간단한 문법이다. 표현할 데이터들을 내림차순이나 오름차순으로 정렬하는 키워드이다. 예를들어 학생들의 정보를 읽어오고 싶은데 학번이 높은 순으로 가져오고 싶다 라면 SELECT * FROM 학생정보 ORDER BY 학번 DESC; 라고 적어주면 된다.


학번이 높은 순으로 그리고 이름 순으로 정렬하고 싶다면 SELECT * FROM 학생정보 ORDER BY 학번 DESC, 이름 ASC; 라고 적으면 끝.


ORDER BY 컬럼 DESC or [ASC] 를 적어주면 된다.

DESC는 내림차순 한다는 뜻이고 ASC는 오름차순이라는 뜻이다. ASC는 생략해도 좋다.


가장 중요한 것, ORDER BY 절에서만 SELECT 절에서 지정해준 별칭도 사용하여 표현 할 수가 있다.


SELECT NAME FROM 학생정보 ORDER BY NAME;

SELECT NAME AS "이 름" FROM 학생정보 ORDER BY "이 름";

보통의 쿼리 문 형태

SELECT EMPNO /*조회하고자 하는 컬럼, 연산 가능*/

  FROM EMP /*어디 저장되어있는지?, 테이블, 뷰*/

 WHERE /*특정조건을 걸때, empno > 1000*/

 GROUP  BY /*특정 컬럼을 그룹 지어서 뭔가를 할때, 이 부분을 사용할때는 컬럼에 관한 복수 행 함수가 필요*/

HAVING /*그룹에 대한 조건*/

 ORDER BY /*asc(오름차순 생략가능), desc(내림차순)*/

  ;


기본 문법은 사실 위의 5가지 키워드 정도만 알고 있으면 문제 없다. 전에도 말했다시피 GROUP BY와 HAVING 은 나중에 복수 행 함수 쪽 설명할때 설명하도록하겠다.

간단하지 않는가?

처리순서

SLECT 그룹함수     -5

FROM 테이블        -1

WHERE 조건         -2

GROUP BY 컬럼     -3

HAVING 그룹조건  -4

ORDER BY 컬럼     -6


위의 숫자대로 처리 한다. 예를들어 아래와 같은 쿼리가 있다고 하면..

SELECT job, AVG(sal), SUM(sal)

FROM emp

WHERE deptno <> 10

GROUP BY job

HAVING AVG(sal) >= 3000

ORDER BY job;


1. EMP 테이블에서

2. 부서번호(deptno)가 10이 아닌 데이터를

3. 업무(job)가 같은 사람끼리 그룹지어서 뭘 표현 할 건데

4. 이 업무별로 묶여진 사람들의 연봉평균(AVG(sal))이 3000이상인 데이터만 보게끔 하고 

5. 결과화면이 차례대로 업무(job), 평균연봉(avg(sal)), 연봉합계(sum(sal)) 순으로 표시할꺼야.

6. 아, 그리고 업무(job)를 오름차순으로 정렬해서 보여줘야 돼.


아직 우리가 그룹함수 쪽은 안 배웠으니 3, 4번만 생략하고 생각해 봐도 될 것이다.

순서만 잘 기억하면 추후에 쿼리를 짜는데 있어서 금방금방 짤 수가 있다. 처음 쿼리를 짜볼때 아는 함수들 다 가져다가 쓰고 막 하다보면 왜 오류가 나지? 라는 생각을 하게 될 수도 있는데 이 순서에 대해서 별로 깊게 생각을 안하고 그냥 어디서 봤던거 막 가져와서 써서 그렇다. 순서를 잘 알면 어디 문법이 논리적으로 안 맞는지에 대해서 더 잘 알 수 있으니 순서는 꼭 알아두자.

결론

다음에는 연습 데이터를 넣고 실습 할 수 있는 정보들로 실습위주로 글들을 적어보겠다. 사실 필자 블로그 찾아서 윈도우에 오라클 깔고 DB개발툴도 깔고 샘플데이터로 계속해서 쿼리문을 날려보면서 결과를 확인하는 게 습득에 있어서 가장 빠른 것 같다. 책사가지고 그냥 눈으로 글만 본다면 몇일 지나 금방 까먹을 것이다.