⛏️/Mysql | Oracle

[SQL] 6. ORDER BY

defyuil 2023. 8. 9. 09:29

ORDER BY절

  • 사용자가 정한 정렬 기준과 정렬 방식으로 정렬된 결과를 만들 수 있는 옵션절.

정렬 방식

  숫자 문자 날짜
오름차순 / ASC
작은 값  큰 값
1 → 9 'A'→'Z' 이전→이후
내림차순 / DESC
큰 값  작은 값
9 → 1 'Z'→'A' 이후→이전

 

  • 정렬 기준 : hire_date(고용일)
  • 정렬 방식 : DESC(내림차순)
mysql> SELECT last_name, job_id, department_id, hire_date
    -> FROM employees
    -> ORDER BY hire_date DESC;

 

 

mysql> SELECT employee_id, last_name, salary*12 annsal
    -> FROM employees
    -> ORDER BY annsal;

 

 

 

  • 컬럼 위치표기로 정렬 기준 설정
  • SELECT절의 세번째 요소값을 기준으로 정렬 기준을 설정.
  • 정렬 방식은 생략되었으므로 오름차순이 적용 됨.
mysql> SELECT last_name, job_id, department_id, hire_date
    -> FROM employees
    -> ORDER BY 3;

+-------------+------------+---------------+------------+

| last_name   | job_id     | department_id | hire_date  |

+-------------+------------+---------------+------------+

| Grant       | SA_REP     |          NULL | 1999-05-24 |

| Whalen      | AD_ASST    |            10 | 1987-09-17 |

| Hartstein   | MK_MAN     |            20 | 1996-02-17 |

| Fay         | MK_REP     |            20 | 1997-08-17 |

| Raphaely    | PU_MAN     |            30 | 1994-12-07 |

| Khoo        | PU_CLERK   |            30 | 1995-05-18 |

| Baida       | PU_CLERK   |            30 | 1997-12-24 |

| Tobias      | PU_CLERK   |            30 | 1997-07-24 |

| Himuro      | PU_CLERK   |            30 | 1998-11-15 |

| Colmenares  | PU_CLERK   |            30 | 1999-08-10 |

| Mavris      | HR_REP     |            40 | 1994-06-07 |

| Weiss       | ST_MAN     |            50 | 1996-07-18 |

 

 

  • 정렬기준 별 정렬 방식은 별도로 설정한다.
  • department_id는 1차 정렬로 정렬방식이 생략되어 오름차순으로 정렬
  • 1차 정렬에서 중복값이 발생하는 경우 2차정렬이 동작하여 중복된 데이터들에 대한 추가적인 정렬을 수행하게 된다.
  • 부서id로 오름차순 정렬하되, 동일한 부서에 근무하는 직원들의 경우 급여의 내림차순으로 추가 정렬을 실행한다.
mysql> SELECT last_name, department_id, salary
    -> FROM employees
    -> ORDER BY department_id, salary DESC;

+-------------+---------------+----------+

| last_name   | department_id | salary   |

+-------------+---------------+----------+

| Grant       |          NULL |  7000.00 |

| Whalen      |            10 |  4400.00 |

| Hartstein   |            20 | 13000.00 |

| Fay         |            20 |  6000.00 |

| Raphaely    |            30 | 11000.00 |

| Khoo        |            30 |  3100.00 |

| Baida       |            30 |  2900.00 |

| Tobias      |            30 |  2800.00 |

| Himuro      |            30 |  2600.00 |

| Colmenares  |            30 |  2500.00 |

| Mavris      |            40 |  6500.00 |

| Fripp       |            50 |  8200.00 |

| Weiss       |            50 |  8000.00 |

| Kaufling    |            50 |  7900.00 |

 

 

 

  • 위 예문을 위치표기법의 정렬로 작성
mysql> SELECT last_name, department_id, salary
    -> FROM employees
    -> ORDER BY 2, 3 DESC;

 

 

연습문제 풀이(p.113)

mysql> SELECT last_name, salary, commission_pct
    -> FROM employees
    -> WHERE commission_pct IS NULL
    -> ORDER BY salary DESC;

+-------------+----------+----------------+

| last_name   | salary   | commission_pct |

+-------------+----------+----------------+

| King        | 24000.00 |           NULL |

| Kochhar     | 17000.00 |           NULL |

| De Haan     | 17000.00 |           NULL |

| Hartstein   | 13000.00 |           NULL |

| Greenberg   | 12000.00 |           NULL |

| Higgins     | 12000.00 |           NULL |

| Raphaely    | 11000.00 |           NULL |

| Baer        | 10000.00 |           NULL |