MS SQL에서는 쿼리에서 반환되는 데이터를 정렬(순서지정) 하기 위해서 ORDER BY 절을 사용하면 됩니다. 인덱스가 없다면 기본적으로 데이터는 입력된 순서대로 출력이 됩니다. 저 같은 경우는 모든 사용자 화면에 기본적으로 ORDER BY 절을 추가 합니다.
그럼 간단한 예제를 통해서 ORDER BY 절에 대해서 알아보죠.
포스트 기준
- Microsoft SQL Server 2019
- SSMS 18.10
구문 (syntaxsql)
[ ORDER BY { order_by_expression [ ASC | DESC ]} [ ,...n ] ]
1) order_by_expression : 쿼리 결과 집합을 정렬할 열 또는 식을 지정
2) ASC, DESC : 오름차순으로 정렬되는지 내림차순으로 정렬되는지를 지정합니다. ASC는 오름차순, DESC는 내림차순으로 정렬합니다. ASC가 기본 정렬 순서로 생략해도 됩니다.
1. 테스트 데이터
-- 총 10건 SELECT * FROM BS_DEMO_72. 오름차순 ASC 예제 1)
▶ 1번, 2번, 3번 쿼리 결과 동일함
-- 1) 과목으로 오름차순(ASC) 정렬 SELECT * FROM BS_DEMO_7 ORDER BY SUBJECT ASC -- 2) 과목으로 오름차순(ASC) 정렬 : ASC 생략가능 SELECT * FROM BS_DEMO_7 ORDER BY SUBJECT -- 3) 과목으로 오름차순(ASC) 정렬 : 위치를 나타내는 정수로 정렬 가능 SELECT * FROM BS_DEMO_7 ORDER BY 33. 내림차순 DESC 예제 2)
▶ 1번, 2번 쿼리 결과 동일함
4. 여러 열 항목 정렬 예제 3)
-- 이름 순으로 먼저 오름차순(ASC)으로 정렬하고 난뒤 -- 다음에 과목 순으로 내림차순(DESC)으로 정렬 SELECT * FROM BS_DEMO_7 ORDER BY NAME, 3 DESC이상입니다.
'구독'과 '좋아요'는 다음 글 작성에 큰 힘이 됩니다.
MySQL에서 ORDER BY로 정렬시 null값 처리
ORDER BY 구문을 통해 데이터를 정렬하는데, 문자열은 사전순으로, 숫자의 경우 그 수의 크기 순으로 정렬합니다. 그러나 NULL값의 경우는 값이 없다는 의미를 가지고 있기에 대소를 가릴 수 없는데, 그래서인지 NULL값 정렬에 대한 정해진 표준이 없기 때문에 Oracle이나 MySQL, MS-SQL, PostgreSQL 등 각 DBMS의 공급사마다 다른 방식으로 NULL값 정렬에 대한 처리를 하고 있습니다.
결론적으로 MySQL의 경우 NULL값은 가장 작은 값으로 취급하고 있습니다.
simple_tbl 테이블은 단순히 number라는 INTEGER형 컬럼 하나만을 가지고 있는 테이블입니다.
SELECT * FROM simple_tbl; | cs |
네 개의 정수값과 NULL값을 하나 가지고 있습니다.
이 상태에서 number컬럼을 오름차순으로 정렬한 경우 NULL값이 있는 행이 가장 첫 행인것을 볼 수 있습니다.
SELECT * FROM simple_tbl ORDER BY number ASC; | cs |
반대로 내림차순인 경우에는 NULL값이 있는 행이 가장 마지막 행으로 정렬됩니다.
SELECT * FROM simple_tbl ORDER BY number DESC; | cs |