메인 콘텐츠로 건너뛰기

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
테이블에는 순서가 없습니다. 행은 서버가 편한 대로 아무 순서로나 돌아오고, 그 순서는 한 번 실행할 때와 다음 번 사이에 바뀔 수 있습니다. ORDER BY가 결과의 순서를 결정하는 유일한 것입니다. 시작하기 전에 mysql -u root -p sakila로 클라이언트를 여세요.

ORDER BY의 동작 방식

SORT_COLUMN을 정렬 기준 열로 바꾸세요. DIRECTION은 가장 작은 것부터인 ASC 또는 가장 큰 것부터인 DESC 중 하나입니다. 선택 사항이고, 생략하면 ASC를 뜻합니다.

예제

  1. 열 하나로 정렬

  1. 반대로 정렬

Sakila는 모든 영화에 단 3가지 요금 중 1가지를 매기고, 336개의 영화가 최고 요금 4.99를 공유합니다. 동점인 그 336개 행 사이의 순서는 이 쿼리가 결정하지 않으므로, 여기 보이는 순서와 다를 수 있습니다.

  1. 두 번째 열로 동점 깨기

정렬 열을 우선순위 순서로 쉼표로 구분해 나열하세요. 각 열은 자체 방향을 가집니다.
rental_rate가 여전히 내림차순으로 앞섭니다. 각 요금 안에서는 가장 짧은 영화가 먼저 옵니다. 길이가 같은 영화는 여전히 동점이므로, 완전히 결정된 순서에는 모든 행을 유일하게 만들 만큼의 열이 필요합니다.

  1. 별칭으로 정렬

ORDER BY는 같은 쿼리의 열 별칭을 참조할 수 있습니다.

별칭은 작은따옴표가 아니라 백틱으로 감싸세요

공백이 든 별칭은 인용 부호로 감싸야 하는데, 여기서 2가지 인용 방식이 갈립니다. 작은따옴표는 이름이 아니라 문자열을 만들고, 고정된 문자열로 정렬하면 아무것도 정렬되지 않습니다.
요금이 0.99, 4.99, 2.99로 이어지므로, 아무것도 정렬되지 않았습니다. 서버는 'Rate'를 4글자 단어로 읽고 모든 행을 같은 값으로 정렬했습니다. 오류도 없고, 경고도 없고, 정렬도 없습니다. 백틱은 별칭을 지정하고, 정렬이 일어납니다:
보이는 모든 행이 0.99이므로, 그 행들 사이의 순서도 여기서 결정되지 않습니다.

NULL이 놓이는 자리

열은 NULL을 가질 수 있는데, 값이 전혀 없음을 기록하는 것입니다. 0도 아니고 빈 문자열도 아닙니다. MySQL은 NULL을 모든 실제 값보다 작은 것으로 정렬하므로, 오름차순은 NULL을 먼저 놓습니다. address의 603개 행 중 4개에 address2가 없습니다.
4개의 NULL 행이 먼저 옵니다. 그 뒤의 행은 빈 문자열을 가지고 있는데, 빈 문자열은 실제 값이므로 NULL보다 크고 어떤 텍스트보다 작은 것으로 정렬됩니다. 그 4개의 NULL 행은 서로 동점이므로, 그 사이의 순서는 이 쿼리가 결정하지 않습니다. DESC는 이것을 뒤집고 NULL은 맨 아래로 갑니다. 같은 결과를 반대로 정렬한 것의 끝부분입니다:

요약

  • 결과의 순서를 결정하려면 ORDER BY를 사용하세요. 다른 어떤 것도 순서를 결정하지 않습니다.
  • 가장 큰 것부터 보려면 DESC를 쓰세요. ASC가 기본값입니다.
  • 동점을 깨려면 정렬 열 여러 개를 우선순위 순서로 나열하세요.
  • 별칭으로 정렬할 때는 백틱으로 감싸세요. 작은따옴표는 문자열을 만듭니다.
  • 오름차순 정렬에서는 NULL이 먼저, 내림차순 정렬에서는 마지막에 옵니다.

함께 보기