티스토리 뷰
안녕하세요, 끙정입니다.
오늘은 정렬의 기본인 ORDER BY 절에 대해 알아보겠습니다.
1. DBMS별 정렬 차이
오라클과 SQL Server, Maria DB를 비교하면서 SQL문을 리뷰하고 있습니다.
정렬 차이에 있어서도 세 DBMS가 다소 차이가 있는데요.
1) 오라클은 입력 순서대로 저장하고 출력한다.
2) SQL Server와 Maria DB는 Primary Key를 기준으로 오름차순 정렬한다.
즉, 똑같은 쿼리를 통해 데이터를 적재하더라도 저장 순서와 출력 순서는 다릅니다.
왼쪽이 Oracle, 가운데가 SQL Server, 오른쪽이 Maria DB
SQL Server와 Maria DB는 Primary Key인 name의 문자열 순서대로 정렬이 되어 부산이 맨 위에 있습니다.
그러나 Oracle은 입력 순서대로 서울이 맨 위에 있습니다.
2. ORDER BY
2-1. 기본 정렬
그러나 어차피 출력시에 원하는 순서대로 정렬을 할 수 있기 때문에 어떻게 저장되는지는 큰 의미가 없습니다.
ORDER BY의 기본적인 형식은 다음과 같습니다.
/* ASC와 DESC중에 하나를 쓸 수 있다. */
/* 생략하면 디폴트인 ASC가 적용되기 때문에 ASC는 보통 생략한다. */
ORDER BY 필드 [ASC | DESC]
예시를 보여드리겠습니다.
/* popu 필드를 기준으로 오름차순으로 출력한다. */
SELECT * FROM tCity ORDER BY popu;
/* popu 필드를 기준으로 내림차순으로 출력한다. */
SELECT * FROM tCity ORDER BY popu DESC;
2-2. 다중 정렬
두 개 이상의 기준 필드를 지정할 수도 있습니다.
이 때는 선행 기준 필드를 정렬하고,
동일한 값의 경우 후행 필드를 기준으로 정렬합니다.
/* region을 기준으로 내림차순하고, 동일한 값이 경우 name을 기준으로 내림차순 정렬 */
SELECT region, name, area, popu FROM tCity ORDER BY region, name DESC;
2-3. 순서값 정렬
ORDER BY의 기준을 보통은 필드명으로 하지만 순서값으로도 지정할 수 있습니다.
pandas의 .loc 과 .iloc 같은 느낌입니다.
테이블 tCity의 경우 name이 1번, area가 2번, 이런 식으로 필드 순서값으로도 정렬이 가능합니다.
여기서 유의할 점은 특이하게도 0부터 시작하지 않는다는 점입니다.
/* 두 쿼리는 동일한 결과를 출력한다. */
SELECT * FROM tCity ORDER BY area;
SELECT * FROM tCity ORDER BY 2;
동일한 결과가 나온다.
2-4 그 외.
정렬 기준 필드를 꼭 출력 목록에 포함하지 않아도 됩니다.
SELECT name FROM tCity ORDER BY popu;
popu가 보이지 않아도 정렬은 잘 된다.
테이블에 존재하지 않는 계산값도 정렬 기준으로 사용할 수 있습니다.
/* popu * 10000 / area 가 기준이다. */
SELECT name, popu * 10000 / area FROM tCity ORDER BY popu * 10000 / area;
테이블에 없는 계산 값도 정렬 기준으로 할 수 있다.
2-5. WHERE절과 함께 쓰이는 ORDER BY
보통 WHERE절을 많이 쓰기 때문에 WHERE절과 ORDER BY절을 동시에 사용하는 경우가 많습니다.
그런데 중요한 점은 ORDER BY 절이 WHERE 절보다 앞에 있어서는 안 됩니다.
애초에 무엇을 출력할지 정하지도 않은 상태에서 정렬을 먼저 하는 것은 의미가 없습니다.
따라서 SELECT문의 쿼리 실행 순서에서 ORDER BY 는 마지막에 수행 됩니다.
/* 잘 날린 쿼리 */
SELECT * FROM tCity WHERE region = '경기' ORDER BY area;
/* 에러가 뜰 쿼리 */
SELECT * FROM tCity ORDER BY area WHERE region = '경기';
그만 알아보겠습니다.
출처
http://www.yes24.com/Product/Goods/101637633?OzSrank=1
'SQL' 카테고리의 다른 글
집계함수를 알아보자 (feat.COUNT, SUM, AVG ...) (0) | 2023.01.26 |
---|---|
효율적으로 출력하는 법을 알아보자 (feat. DISTINCT, ROWNUM, TOP, LIMIT, OFFSET FETCH) (2) | 2023.01.26 |
WHERE 절을 알아보자 2편 (feat. LIKE, BETWEEN, IN) (0) | 2023.01.26 |
WHERE 절을 알아보자 1편 (feat. NULL, 비교/논리 연산자) (0) | 2023.01.26 |
SELECT 문을 알아보자 / AS, 필드목록, 계산값 출력 (0) | 2022.11.27 |
- Total
- Today
- Yesterday
- Apple
- IDC
- alexa
- genai
- sql
- Nvidia
- ChatGPT
- galaxyai
- Meta
- Amazon
- datacenter
- searchgpt
- sb1047
- Samsung
- condenast
- aichip
- apple intelligence
- aitv
- ai pc
- OpenAI
- Intel
- perplexity
- SSI
- 액침냉각
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |