반응형
ORDER BY는 SELECT 문장으로 조회된 데이터를 다양한 목적에 맞게 특정 칼럼을 기준으로 정렬하여 출력하는 데 사용됩니다.
ORDER BY 특징
- 쿼리 결과 집합을 지정한 열 목록별로 정렬하고 필요한 경우 반환되는 행을 지정한 범위로 제한할 수 있습니다.
- ORDER BY 절을 지정하지 않으면 결과 집합에서 행이 반환되는 순서가 보장되지 않습니다.
- 순위 함수 DATA 집합에 적용되는 순서를 결정합니다.
- 열 정렬은 이름이나 열 별칭으로 지정되거나 SELECT 목록에 있는 열의 위치를 나타내는 음수가 아닌 정수로 지정될 수 있습니다.
- 열 이름은 고유해야 order by를 사용할 수 있습니다.
- 결과 집합은 첫 번째 열을 기준으로 정렬된 다음이 정렬된 목록이 두 번째 열을 기준으로 정렬되는 식으로 정렬합니다.
- COLLATE는 char, varchar, nchar 및 nvarchar 형식의 열에만 적용할 수 있습니다.
- 지정된 열의 값이 오름차순으로 정렬되는지 내림차순으로 정렬되는지를 지정합니다.
- ASC는 오름차순으로 정렬하고, DESC는 내림차순으로 정렬합니다. ASC가 기본 정렬 순서입니다.
- Null 값은 가능한 가장 작은 값으로 취급됩니다.
ORDER BY 사용법
기본적인 ORDER BY 사용법.
- Syntax.
[ ORDER BY
{
order_by_expression
[ ASC | DESC ]
} [ ,...n ]
]
- 예제.
-- 기본적인 ORDER BY 사용법
USE sampleDB;
GO
SELECT scoreyyyymm,classNo ,studentNm,korScore,mathScore
FROM UserInfoForOrderby
WHERE studentNm LIKE '%A%'
AND scoreyyyymm = '202401'
ORDER BY studentNm;
ORDER BY 칼럼 순번, 별칭으로 정렬 방법.
- 열 별칭을 지정 후 order by column에서 정렬 순서 열로 지정합니다.
-- 칼럼 순번, 별칭으로 정렬 방법
USE sampleDB;
GO
SELECT scoreyyyymm ,classNo num ,studentNm,korScore,mathScore
FROM UserInfoForOrderby
WHERE studentNm LIKE '%A%'
ORDER BY num,4 desc;
ORDER BY 오름차순과 내림차순 둘 다 지정.
- korScore 열을 기준으로 오름차순으로 정렬된 다음 mathScore 열을 기준으로 내림차순으로 정렬됩니다.
-- 오름차순과 내림차순 둘 다 지정
USE sampleDB;
GO
SELECT scoreyyyymm ,classNo ,studentNm,korScore,mathScore
FROM UserInfoForOrderby
WHERE studentNm LIKE '%A%'
ORDER BY korScore asc,mathScore desc;
ORDER BY 조건부 순서 지정.
- ORDER BY 절에 CASE 식을 사용하여 지정된 열값에 따라 행의 정렬 순서를 조건부로 결정합니다.
-- 조건부 순서 지정
USE sampleDB;
GO
SELECT scoreyyyymm ,classNo ,studentNm,korScore,mathScore
FROM UserInfoForOrderby
WHERE studentNm LIKE '%A%'
ORDER BY CASE classNo WHEN 1 THEN korScore END DESC
,CASE WHEN classNo = 2 THEN mathScore END;
순위 함수에 ORDER BY 사용.
- 순위 함수 ROW_NUMBER, RANK, DENSE_RANK 및 NTILE에 ORDER BY 절을 사용할 수 있습니다.
SELECT classNo,studentNm,korScore
,RANK() OVER (ORDER BY classNo asc, korScore DESC ) AS winFuncRank
,DENSE_RANK() OVER (ORDER BY classNo asc, korScore DESC ) AS winFuncDenseRank
,ROW_NUMBER() OVER (ORDER BY classNo asc, korScore DESC ) AS winFuncRowNum
,NTILE(4) OVER (ORDER BY classNo asc, korScore DESC ) AS Quartile
FROM UserInfoForOrderby
WHERE scoreyyyymm = '202401';
반환되는 행 수 제한.
- 정수 상수를 사용하여 OFFSET 및 FETCH 값 지정.
-- 정수 상수를 사용하여 OFFSET 및 FETCH 값 지정
USE sampleDB;
GO
SELECT scoreyyyymm ,classNo ,studentNm,korScore,mathScore
FROM UserInfoForOrderby
WHERE scoreyyyymm = '202401'
ORDER BY classNo ,studentNm OFFSET 6 ROWS;
USE sampleDB;
GO
SELECT scoreyyyymm ,classNo ,studentNm,korScore,mathScore
FROM UserInfoForOrderby
WHERE scoreyyyymm = '202401'
ORDER BY classNo ,studentNm
OFFSET 2 ROWS
FETCH NEXT 8 ROWS ONLY;
- 변수를 사용하여 OFFSET 및 FETCH 값 지정.
-- 변수를 사용하여 OFFSET 및 FETCH 값 지정
USE sampleDB;
GO
-- Specifying variables for OFFSET and FETCH values
DECLARE @RowsToSkip TINYINT = 2
, @FetchRows TINYINT = 8;
SELECT scoreyyyymm ,classNo ,studentNm,korScore,mathScore
FROM UserInfoForOrderby
WHERE scoreyyyymm = '202401'
ORDER BY classNo ,studentNm
OFFSET @RowsToSkip ROWS
FETCH NEXT @FetchRows ROWS ONLY;
UNION, EXCEPT 및 INTERSECT에 ORDER BY 사용.
- UNION 예제.
SELECT scoreyyyymm ,classNo ,studentNm,korScore,mathScore
FROM UserInfoForOrderby
WHERE scoreyyyymm = '202401'
-- ORDER BY cannot be specified here.
union all
SELECT scoreyyyymm ,classNo ,studentNm,korScore,mathScore
FROM UserInfoForOrderby
WHERE scoreyyyymm = '202401'
ORDER BY classNo ,studentNm
ORDER BY 제한사항
- ORDER BY 절의 열 개수에는 제한이 없지만 ORDER BY 절에 지정된 열의 전체 크기는 8,060바이트를 초과할 수 없습니다.
- ntext, text, image, geography, geometry 및 xml 형식의 열은 ORDER BY 절에서 사용할 수 없습니다.
- 순위 함수에(OVER 절에서는) 나타나는 경우 정수 또는 상수를 지정할 수 없습니다.
- UNION, EXCEPT 또는 INTERSECT 연산자를 사용하는 쿼리에서는 문의 끝부분에만 ORDER BY를 사용할 수 있습니다.
- TOP 절 또는 OFFSET 및 FETCH 절을 함께 지정하지 않은 한 뷰, 인라인 함수, 파생 테이블 및 하위 쿼리에서 ORDER BY 절을 사용할 수 없습니다.
- OVER 절은 OFFSET 및 FETCH를 지원하지 않습니다.
- OFFSET 및 FETCH는 INSERT, UPDATE, MERGE 및 DELETE 문에서 직접 지정할 수 없지만 이러한 문에 정의된 sub Query에서는 지정할 수 있습니다.
- INSERT INTO SELECT 문의 경우 SELECT 문에서 OFFSET 및 FETCH를 지정할 수 있습니다.
- UNION, EXCEPT 또는 INTERSECT 연산자를 사용하는 쿼리에서는 쿼리 결과의 순서를 지정하는 마지막 쿼리에서만 OFFSET 및 FETCH를 지정할 수 있습니다.
반응형