튜플을 특정 컬럼을 기준으로 정렬한다.
⭐ 참고로, MySQL에서는 NULL값을 가장 작은 값으로 간주한다.
Format
SELECT [ALL|DISTINCT] {{컬럼명 [[AS] 컬럼_별칭],}⁺|*}
FROM 테이블_리스트
[WHERE 투플_조건식]
[GROUP BY 컬럼명 [HAVING 그룹_조건식]]
[ORDER BY {컬럼명|컬럼_별칭|컬럼_위치 [ASC|DESC],}⁺];
Example
SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM PLAYER
ORDER BY 포지션 ASC;
❗ GROUP BY절과 WHERE절에서는 alias 별칭을 사용할 수 없지만, ORDER BY절에서는 가능하다 !
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE HEIGHT IS NOT NULL
ORDER BY HEIGHT DESC, BACK_NO;
먼저 HEIGHT를 내림차순으로 1차 정렬하고, BACK_NO를 오름차순(디폴트)으로 2차 정렬한다.
만약, 정렬 시에 값이 같을 때는 데이터가 저장된 순서대로 정렬한다.
SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버,
FROM PLAYER
WHERE BACK_NO IS NOT NULL
ORDER BY 3 DESC, 2, 1;
이렇게 컬럼 위치로도 정렬해줄 수 있다. 이 경우, 3차 정렬을 했다.
다음과 같이 ORDER BY절에는 SELECT 목록에 없는 컬럼이 포함될 수 있다.
SELECT PLAYER_ID, POSITION
FROM PLAYER
ORDER BY PLAYER_NAME;
하지만, GROUP BY절을 같이 사용하게 되면, SELECT 목록에 없는 컬럼이 포함될 수 없다.
왜? -> GROUP BY절을 사용하면 임시테이블을 새로 만들고, 그 외의 컬럼들은 메모리에서 제거하기 때문이다.
😨 BUT!! MySQL에서는 알다시피 메모리에서 제거하지 않기 때문에 에러가 발생하지 않는다.