BackEnd/MySQL

[DB] ORDER BY절

Hojung7 2024. 8. 24. 12:45
▶ ORDER BY 절

SELECT 조회 결과 집합 (RESULT SET)을  원하는 순서로 정렬할 때 사용하는 구문

 

[작성법]

 

3) SELECT 컬럼명.. (특정 컬럼만 선택해서 볼거야)

 

1) FROM 테이블명 (어떤 테이블에서)

 

2) WHERE 조건식 (조건을 만족하는 행만 선택(조회))

 

4) ORDER BY (조회된 결과를 정렬할거야!!)

컬럼명 | 별칭 | 컬럼순서(숫자)

 

 [ASC / DESC] (오름차순 / 내림차순)

 

 [NULLS FIRST / NULLS LAST] (NULL 위치 지정)

 

 ****ORDER BY절은 무조건 SELECT 마지막에 수행된다!!!***

 

오름차순(ASCENDING)    : 점점 커짐 EX) 1 -> 10 / 가 -> 하 / A -> Z / 과거 -> 미래
내림차순 (DESCENDING) : 점점 작아짐 EX) 10 -> 1 / 하 -> 가 / Z -> A / 미래 -> 과거

 

-

#예제

 EMPLOYEE 테이블에서 부서코드가 'D5', 'D6', 'D9'인 사원의

사번, 이름, 부서코드를 부서코드 오름차순으로 조회

 

SELECT EMP_ID, EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE IN('D5', 'D6', 'D9')
ORDER BY DEPT_CODE ASC;

 

<컬럼 순서를 이용해서 정렬>

 

급여가 400만 이상, 600만 이하인 사원의 사번, 이름, 급여를 급여 내림차순으로 조회

SELECT DEPT_CODE, EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 4000000 AND 6000000
--ORDER BY SALARY DESC;
ORDER BY 3 DESC;

 

 

<별칭을 이용해서 정렬>

직급 코드가 'J4', 'J5', 'J6'인 사원을 사번, 이름, 직급코드 조회하기

 단, 이름 오름차순으로 조회

SELECT EMP_ID "사번", EMP_NAME "이름", JOB_CODE "직급코드"
FROM EMPLOYEE
WHERE JOB_CODE IN('J4', 'J5', 'J6')
ORDER BY "이름";

 

WHERE "직급코드" IN('J4', 'J5', 'J6')오류 발생

[원인]

WHERE 절은 SELECT절보다 먼저 해석되는데

→ 별칭은 SELECT절이 해석되어야 등록되기 때문에

 WHERE절에서는 별칭 사용 불가능!!

 

 

<SELECT절에 작성되지 않은 컬럼을 이용해서 정렬하기>

SELECT절에 작성되지 않아도 이전에 FROM절이 해석되어있기 때문에 정렬 가능

SELECT EMP_ID, EMP_NAME, /*DEPT_CODE*/
FROM EMPLOYEE
ORDER BY DEPT_CODE ASC;

 

 

<정렬 기준 "중첩" 작성>

먼저 작성된 큰 그룹부터 정렬하고 이후 작성된 작은 그룹을 정렬

 

EX)

EMPLOYEE 테이블에서 이름, 부서코드, 급여를 부서코드 오름차순, 급여 내림차순으로 정렬

같은 부서코드끼리 모아 놓고 그 안에서 급여 내림차순 정렬

SELECT EMP_NAME, DEPT_CODE, SALARY

FROM EMPLOYEE

ORDER BY DEPT_CODE ASC, SALARY DESC;

 

#결과

 


 

▷ NULLS FIRST / NULLS LAST(기본값)

 

NULLS FIRST(오름차순)

SELECT EMP_ID, EMP_NAME, DEPT_CODE

FROM EMPLOYEE

ORDER BY DEPT_CODE ASC NULLS FIRST;

 

#결과

 

 

NULLS LAST(내림차순)

SELECT EMP_ID, EMP_NAME, DEPT_CODE
FROM EMPLOYEE
ORDER BY DEPT_CODE DESC NULLS LAST;

 

#결과

 

'BackEnd > MySQL' 카테고리의 다른 글

[DB]Oracle Database의 개요  (0) 2024.08.24
[DB] 함수  (1) 2024.08.24
[DB]WHERE절  (0) 2024.08.24
[DB] DDL(Data Definition Language) (ALTER, DROP)  (0) 2024.08.23
[DB] TCL(Transaction Control Language)  (0) 2024.08.22