바로 hr DB에 접속하는 방법
C:\\Users\\ITWILL>mysql -u root -p hr
ORDER BY절
- 사용자가 정한 정렬 기준과 정렬 방식으로 정렬된 결과를 만들 수 있는 옵션절.
- WHERE 절과 함께 쓰임 (ORDER BY절을 쓰려면 WHERE절이 필수!)
- 간략화 된 정보에서 쓰임
- 쿼리의 가장 마지막 순서에 보통 작성된다. . . . ORDER BY 정렬기준 [정렬방식]
- 정렬 기준으로는 컬럼, 표현식, 함수 등 여러가지를 사용할 수 있으며, SELECT절에서의 사용 여부와는 상관없이 정할 수 있다.
정렬 방식
숫자 | 문자 (알파벳) | 날짜 | |
오름차순 / ASC 작은 값 → 큰 값 |
1 → 9 | ‘A’ → ‘Z’ | 이전 → 이후 |
내림차순 / DESC 큰 값 → 작은 값 |
9 → 1 | ‘Z’ → ‘A’ | 이후 → 이전 |
- ASC : 오름차순 (Ascending order, default)
- DESC : 내림차순 (Descending order)
- 정렬 기준 : hire_date
- 정렬 방식 : DESC(내림차순)
mysql> SELECT last_name, job_id, department_id, hire_date
-> FROM employees
**-> ORDER BY hire_date DESC;**
+-------------+------------+---------------+------------+
| last_name | job_id | department_id | hire_date |
+-------------+------------+---------------+------------+
| Banda | SA_REP | 80 | **2000-04-21** |
| Kumar | SA_REP | 80 | 2000-04-21 |
| Ande | SA_REP | 80 | 2000-03-24 |
...
| Cambrault | SA_REP | 80 | 1998-12-09 |
| Himuro | PU_CLERK | 30 | 1998-11-15 |
| Mikkilineni | ST_CLERK | 50 | 1998-09-28 |
...
| Whalen | AD_ASST | 10 | 1987-09-17 |
| King | AD_PRES | 90 | **1987-06-17** |
+-------------+------------+---------------+------------+
107 rows in set (0.00 sec)
→ ORDER BY annsal (생략); : 오름차순(default)
→ 정렬방식의 기본 방식 : 오름차순이기 때문에 생략 가능하다.
order by column alias절에 사용
- column alias를 정렬기준으로 사용하는 것도 가능
- 정렬 방식은 생략가능. 생략하는 경우 오름차순 기본 적용
mysql> SELECT employee_id, last_name, salary*12 annsal
-> FROM employees
-> ORDER BY annsal;
+-------------+-------------+-----------+
| employee_id | last_name | annsal |
+-------------+-------------+-----------+
| 132 | Olson | 25200.00 |
| 128 | Markle | 26400.00 |
| 136 | Philtanker | 26400.00 |
...
107 rows in set (0.00 sec)
order by절에 위치표기법 사용
- 컬럼 위치표기로 정렬 기준 설정
- 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 |
...
107 rows in set (0.00 sec)
다중 컬럼을 기준으로 정렬하기
- 정렬기준 별 정렬 방식은 별도로 설정한다.
- department_id는 1차 정렬로 정렬방식이 생략되어 오름차순으로 정렬
- 1차 정렬에서 중복값이 발생하는 경우 2차정렬이 동작하여 중복된 데이터들에 대한 추가적인 정렬을 수행하게 된다.
- 부서id로 오름차순 정렬하되, 동일한 부서에 근무하는 직원들의 경우 급여의 내림차순으로 추가 정렬을 실행한다.
*order by 개수가 늘수록 부하가 많이 늘어남 → 간략하게 값을 추출하고 정렬해야함! (순서)
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 |
...
107 rows in set (0.00 sec)
↓ 위 예문을 위치표기법의 정렬로 작성
mysql> SELECT last_name, department_id, salary
-> FROM employees
-> ORDER BY 2, 3 DESC;
연습문제(p.113)
- employees 테이블로부터 커미션을 받지 않는 모든 사원(where)의 last_name, salary, commission_pct를 출력하되 salary를 기준으로 내림차순(order by) 정렬하시오.
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 |
...
72 rows in set (0.00 sec)
↓ 위 예문을 위치표기법의 정렬로 작성
mysql> SELECT last_name, salary, commission_pct
-> FROM employees
-> WHERE commission_pct IS NULL
-> ORDER BY 2 DESC;
'DB > MySQL' 카테고리의 다른 글
[MySQL] 데이터 언어 - DML (0) | 2023.09.16 |
---|---|
[Mysql] JOIN, SELF-JOIN, table alias (0) | 2023.09.16 |
[Mysql] where절과 연산자(2) (0) | 2023.09.14 |
[Mysql] ★where절(조건문)과 연산자(1) (0) | 2023.09.14 |
[Mysql] DISTINCT (0) | 2023.09.14 |