티스토리 뷰
▶▶ ORDER BY 절
– 사용자가 지정한 기준과 정렬방식으로 출력 결과를 정렬하여 만드는 옵션절.
– ORDER BY절의 위치는 SELECT 구문에서 대부분 가장 마지막에 위치함.
원하는 데이터 추출 후 마지막에 보기 편하게 정렬할 때 사용함.
– 데이터가 많으면 많을수록 정렬 잘못했다가는 여러모로 위험함.
특히, 테이블의 모든 행을 출력할 때 정렬해버리면 시간소모도 크므로 쓸 때 조심해야 함
– 정렬방식
- 오름차순 (Ascending order/ASC)
- 내림차순 (Descending order/DESC)
ORDER BY + 정렬기준 컬럼 + 정렬방식
정렬방식 | 숫자 (0 < 9) | 문자 ('A' < 'Z') | 날짜 (이전 < 이후) |
오름차순(사전순) 작은 값 → 큰 값 |
0 → 9 | 'A' → 'Z' | 이전 → 이후 |
내림차순 큰 값 → 작은 값 |
9 → 0 | 'Z' → 'A' | 이전 → 이후 |
EX1 ) 내림차순 정렬
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 | | Markle | ST_CLERK | 50 | 2000-03-08 | | Lee | SA_REP | 80 | 2000-02-23 | | Philtanker | ST_CLERK | 50 | 2000-02-06 | ... | Kochhar | AD_VP | 90 | 1989-09-21 | | Whalen | AD_ASST | 10 | 1987-09-17 | | King | AD_PRES | 90 | 1987-06-17 | +-------------+------------+---------------+------------+ 107 rows in set (0.00 sec)
EX2 ) column alias 사용 & ORDER BY절의 기본값
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 | | 127 | Landry | 28800.00 | ... | 102 | De Haan | 204000.00 | | 100 | King | 288000.00 | +-------------+-------------+-----------+ 107 rows in set (0.00 sec)
→ column alias를 정렬기준으로 사용할 수 있음.
→ SELECT절에 명시된 alias를 사용해야 출력값에 alias가 나옴.
→ 정렬방식을 생략하는 경우 기본값으로 오름차순(ASC)가 적용됨.
EX2–1 ) ORDER_BY절에 SELECT의 컬럼명을 안 쓸 경우
mysql> SELECT employee_id, last_name, salary*12 annsal -> FROM employees -> ORDER BY salary*36; +-------------+-------------+-----------+ | employee_id | last_name | annsal | +-------------+-------------+-----------+ | 132 | Olson | 25200.00 | | 128 | Markle | 26400.00 | | 136 | Philtanker | 26400.00 | | 127 | Landry | 28800.00 | ... | 102 | De Haan | 204000.00 | | 100 | King | 288000.00 | +-------------+-------------+-----------+ 107 rows in set (0.00 sec)
→ SELECT과 ORDER BY절은 개별적으로 실행되므로, SELECT에 있는 컬럼을 안 쓴다해도 결과는 나옴.
EX3 ) LENGTH함수 사용해보기
mysql> SELECT employee_id, last_name, salary*12 annsal -> FROM employees -> ORDER BY LENGTH(last_name) DESC; +-------------+-------------+-----------+ | employee_id | last_name | annsal | +-------------+-------------+-----------+ | 126 | Mikkilineni | 32400.00 | | 119 | Colmenares | 30000.00 | | 136 | Philtanker | 26400.00 | | 177 | Livingston | 100800.00 | ... | 170 | Fox | 115200.00 | | 202 | Fay | 72000.00 | +-------------+-------------+-----------+ 107 rows in set (0.00 sec)
→ LENGTH는 길이를 의미하는 함수이므로 last_name의 길이 내림차순으로 정렬됨.
EX4 ) ORDER BY + 숫자
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 | ... | Popp | FI_ACCOUNT | 100 | 1999-12-07 | | Higgins | AC_MGR | 110 | 1994-06-07 | | Gietz | AC_ACCOUNT | 110 | 1994-06-07 | +-------------+------------+---------------+------------+ 107 rows in set (0.00 sec)
→ 우선, 컬럼명은 알파벳으로 시작해야 함.
→ 숫자 3은 세번째 컬럼을 정렬하란 뜻, 정렬 방식은 생략되어 오름차순이 적용됨.
EX5 ) 다중 컬럼을 기준으로 정렬하기
mysql> SELECT last_name, department_id, salary -> FROM employees -> ORDER BY Department_id, salary DESC; // == ORDER BY 2, 3 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 | ... | Higgins | 110 | 12000.00 | | Gietz | 110 | 8300.00 | +-------------+---------------+----------+ 107 rows in set (0.00 sec)
→ 1차적으로 첫번째 정렬기준으로 행을 정렬하고, 정렬 결과가 같은 값인 행에 대해서 그 다음 차수의 정렬이 동작함.
→ 정렬 기준마다 정렬 방식은 개별적으로 적용됨.
→ 부서번호별로 오름차순 정렬 후 동일 부서에 근무하는 사원들에 대해서, 급여 기준 내림차순으로 정렬함.
→ 컬럼명을 숫자로 바꾸어 쓸 수 있음.
ORDER BY Department_id, salary DESC; == ORDER BY 2, 3 DESC;
Q ) employees 테이블로부터 커미션을 받지 않는 모든 사원의
last_name, salary, commission_pct를 출력하되 salary를 기준으로 내림차순 정렬하시오.
A )
커미션을 받지 않는 사원들 = 값을 비워놓음 = NULL
샐러리 기준으로 내림차순 정렬
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 | ... | Philtanker | 2200.00 | NULL | | Markle | 2200.00 | NULL | | Olson | 2100.00 | NULL | +-------------+----------+----------------+ 72 rows in set (0.00 sec)
→ 질문이 이해안가고 복잡할 때는, 한글로 풀어서 요약만 정리해보고 그 다음 그 문장들을 코드로 풀어내기.
'DB > MySQL' 카테고리의 다른 글
단일 행 함수 — 문자 (0) | 2023.02.07 |
---|---|
JOIN (Self-Join / 비표준 join) (0) | 2023.02.02 |
논리 연산자 (AND / OR / NOT) (0) | 2023.02.01 |
비교 연산자(between A and B / IN / LIKE / IS NULL) (0) | 2023.02.01 |
WHERE(조건문)절 / 비교 연산자(관계) (0) | 2023.02.01 |
- Total
- Today
- Yesterday
- model2
- 다형성
- JSTL
- gitbash
- null
- 로컬저장소
- 오버라이딩
- 내장객체
- 출력문
- Object
- 단일행함수
- 문자형
- 인자
- jsp
- 제어문
- 논리형
- github
- Method
- 원격저장소
- Git
- DB
- 매개변수
- 데이터타입
- 숫자형
- Java
- 업캐스팅
- Dao
- 주석문
- javascript
- mysql
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |