슴슴한 IT

[SQLD, SQLP]SQL기본 - ORDER BY 본문

SQL

[SQLD, SQLP]SQL기본 - ORDER BY

요한바울 2023. 8. 11. 23:25
728x90

ORDER BY란?

SQL 문장으로 조회한 결과를 특정 칼럼 또는 컬럼들을 기준으로 정렬 


 

특성

  • 기본적으로 오름차순(ASC)로 정렬, 내림차순은 DESC 키워드 사용
  • 컬럼 대신 SELECT 절에서 명시한 ALIAS 명이나 컬럼 순서를 나타내는 정수도 사용 가능
  • 컬럼명, ALIAS, 컬럼 순서번호 혼용 가능
  • Oracle에서는 NULL 값을 가장 큰 값으로 간주, 오름차순으로 정렬 시 가장 마지막에 표시, 내림차순으로 정렬 시 가장 먼저 위치 (반면, SQL Server에서는 Oracle과 반대임)
  • NULL 값을 처리하기 위해 'NULLS FIRST' 또는 'NULLS LAST'를 사용할 수 있음.(DBMS에 따라 다름)
  • ORDER BY는 쿼리의 맨 마지막에 위치
SELECT 컬럼명 [ALIAS]
FROM  (테이블 명)
WHERE (조건식)
GROUP BY (컬럼 또는 표현식)
HAVING (그룹 조건식)
ORDER BY (컬럼이나 표현식 )

예시 

축구선수 테이블이 있다고 가정하고, 각 컬럼별 정렬을 할 경우

ID Name Position Age Goals
1 Messi FW 34 25
2 Ronaldo FW 36 30
3 Neuer GK 35 0
4 Ramos DF 35 5

선수 이름으로 정렬하기

SELECT * FROM players ORDER BY name;

나이순으로 정렬하기(오름차순)

SELECT * FROM players ORDER BY age;

득점 순으로 내림차순으로 정렬하기

SELECT * FROM players ORDER BY goals DESC;

포지션별로 정렬하고, 같은 포지션 내에서는 나이순으로 정렬하기

SELECT * FROM players ORDER BY position, age;

득점이 10골 이상인 선수 중 나이가 어린 순서대로 정렬하기 

SELECT * FROM players WHERE goals >= 10 ORDER BY age;

조건에 따라 정렬 순서를 동적으로 변경하는 경우 CASE문을 사용

age가 30 이상이며 먼저 나오고, 그 후에는 name 순으로 정렬 

SELECT name, age 
FROM users 
ORDER BY 
    CASE 
        WHEN age >= 30 THEN 1
        ELSE 2 
    END, 
    name;

 


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90