[DB] DML: 검색문 SELECT의 ORDER BY절

젠니·2023년 5월 27일
0

데이터베이스

목록 보기
7/21

4. ORDER BY절

튜플을 특정 컬럼을 기준으로 정렬한다.

  • ASC: 오름차순 (디폴트)
  • DESC: 내림차순

참고로, 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차 정렬을 했다.

GROUP BY와 ORDER BY를 동시에 사용할 때 주의할 점

다음과 같이 ORDER BY절에는 SELECT 목록에 없는 컬럼이 포함될 수 있다.

SELECT 		PLAYER_ID, POSITION
FROM 		PLAYER
ORDER BY 	PLAYER_NAME;

하지만, GROUP BY절을 같이 사용하게 되면, SELECT 목록에 없는 컬럼이 포함될 수 없다.

왜? -> GROUP BY절을 사용하면 임시테이블을 새로 만들고, 그 외의 컬럼들은 메모리에서 제거하기 때문이다.

😨 BUT!! MySQL에서는 알다시피 메모리에서 제거하지 않기 때문에 에러가 발생하지 않는다.

profile
젠니의 개발 라이푸우

0개의 댓글