본문 바로가기

DB/SQLD

SQL 기본 - order by 절

반응형

order by 절

order by 절은 SQL문장으로 조회한 데이터들을 목적에 맞게 특정 칼럼을 기준으로 '정렬'하는데 사용된다.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
1. 정렬
SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM PLAYER
ORDER BY PLAYER_NAME DESC;
// 선수명 칼럼을 기준으로 DESC 즉, 내림차순으로 정렬한다. 아무것도 안적으면 DEFAULT로 ASC 오름차순
 
SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM PLAYER
ORDER BY 포지션 DESC;
// ORDER BY 절에 ALIAS 사용 가능
 
SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM PLAYER
WHERE BACK_NO IS NOT NULL
ORDER BY 3,2,1;
// 백넘버, 포지션, 선수명 (SELECT 절에서 칼럼 순서로 번호매김) 으로 정렬한다.
// 칼럼순서를 정수로 나타낼 수 있고 그것을 ORDER BY 절에 사용할 수 있으나
// 향후 유지보수성, 가독성이 떨어지므로 사용 자제.**
 
2. SELECT 문장 실행 순서 **
-5- SELECT 칼럼명
-1- FROM 테이블명
-2- WHERE 조건식
-3- GROUP BY 칼럼명 또는 표현식
-4- HAVING BY 그룹조건식
-6- ORDER BY 칼럼명 또는 표현식;
 
// 앞의 번호순으로 실행됨. 나중에 쿼리가 복잡해졌을 때 이 순서가 아주 중요함.
// 1 - 테이블 먼저 참조 FROM
// 2 - 대상이 아닌 것 제거 WHERE
// 3 - 행들을 소그룹화 GROUP BY
// 4 - 그룹핑 된 값의 조건에 맞는것만 추출 HAVING BY
// 5 - 결과값을 출력 SELECT
// 6 - 출력된 결과값을 정렬 ORDER BY
 
SELECT JOB, SAL
FROM EMP
GROUP BY JOB
HAVING COUNT(*> 0
ORDER BY SAL;
// 실패 - SELECT 절에서 SAL 이라는 일반 컬럼을 썼기 때문. 평균급여, 최대급여같은 집계함수를 사용해야함.
 
SELECT JOB
FROM EMP
GROUP BY JOB
HAVING COUNT(*> 0
ORDER BY SAL;
// 실패 - GROUP BY 절이 있는데 ORDER BY 절에서 일반 칼럼을 썼기 때문.
 
SELECT JOB
FROM EMP
GROUP BY JOB
HAVING COUNT(*> 0
ORDER BY MAX(EMPNO),MAX(MGR),SUM(SAL);
// 결과는 위의 정렬순서대로 직업이 나온다.
 
3. ROWNUM
오라클에서 순위가 높은 n개의 로우를 추출하기 위해 WHERE절, ORDER BY 절의 ROWNUM 조건을 같이 사용하는 경우가 있는데 이러면 안된다.
SELECT ENAME, SAL
FROM EMP
WHERE ROWNUM <4
ORDER BY SAL DESC;
// 의도는 사원테이블에서 급여가 높은 3명만 내림차순 출력인데 틀린 것임
// 이유는 아까말한 SELECT 실행순서.
// WHERE이 먼저 실행되서 기존 사원테이블에서 3명 짜르고 그 3명중에서 급여가 높은 순으로 나옴.
 
SELECT ENAME, SAL
FROM (SELECT ENAME, SAL FROM EMP ORDER BY SAL DESC)
WHERE ROWNUM < 4;
// 이렇게 하면 원하는대로 급여가 높은 3명만 내림차순으로 출력됨.


Point

select 문의 실행 순서를 꼭 기억해둘 것.

group by절이 있을 때 select 절, order by절 컬럼명 주의해서 작성할 것.

반응형

'DB > SQLD' 카테고리의 다른 글

SQL 활용 - 표준 조인  (0) 2017.09.05
SQL 기본 - join  (0) 2017.09.05
SQL 기본 - group by, having 절  (0) 2017.09.03
SQL 기본 - 함수  (0) 2017.09.02
SQL 기본 - where 절  (0) 2017.09.01