서론
이번에는 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개발툴도 깔고 샘플데이터로 계속해서 쿼리문을 날려보면서 결과를 확인하는 게 습득에 있어서 가장 빠른 것 같다. 책사가지고 그냥 눈으로 글만 본다면 몇일 지나 금방 까먹을 것이다.