티스토리 뷰

 

 

📌 SQL ORDER BY 설명

ORDER BY는 쿼리 결과를 특정 열을 기준으로 정렬할 때 사용됩니다.

기본적으로 오름차순(ASC) 정렬을 사용하며, 내림차순 정렬을 위해서는 DESC 키워드를 사용합니다.

데이터를 정렬하여 보기 쉽게 만들거나, 특정 순서에 따라 데이터를 처리해야 할 때 유용합니다.

 

 

 

📌 기본 문법

SELECT column_name1, column_name2, ...
FROM table_name
ORDER BY column_name1 [ASC|DESC], column_name2 [ASC|DESC];
 
    • column_name1, column_name2: 정렬 기준이 되는 열
    • ASC: 오름차순 정렬 (기본값으로 생략 가능)
    • DESC: 내림차순 정렬

 

 

 

📌 사용 예제

 

1. 이름을 오름차순으로 정렬

SELECT * FROM employees
ORDER BY name ASC;
 
    • 이 쿼리는 name 열을 기준으로 직원들을 오름차순으로 정렬합니다.
    • 이름이 A부터 Z까지 순서대로 나열됩니다.

 

2. 급여를 내림차순으로 정렬

SELECT * FROM employees
ORDER BY salary DESC;
 
    • 이 쿼리는 salary 열을 기준으로 급여가 높은 순서대로 직원들을 정렬합니다.

 

3. 여러 열을 사용한 정렬

SELECT * FROM employees
ORDER BY department_id ASC, salary DESC;
 
    • 이 쿼리는 먼저 department_id를 기준으로 오름차순 정렬한 후, 동일한 부서 내에서는 salary를 기준으로 내림차순 정렬합니다.

 

4. 날짜를 기준으로 정렬

SELECT * FROM orders
ORDER BY order_date DESC;
 
    • 이 쿼리는 order_date를 기준으로 최신 주문부터 오래된 주문 순으로 정렬합니다.

 

 

 

📌 GOOD 사용법

 

1. 정렬 기준이 명확할 때

    • 사용자가 데이터를 특정 순서로 보고 싶을 때 유용합니다.
    • 예: 최근 등록된 고객 목록을 보고 싶을 때.
SELECT * FROM customers
ORDER BY registration_date DESC;
 

 

2. 다중 열 정렬을 통해 데이터를 세분화할 때

    • 예: 부서별로 그룹화된 후, 각 부서 내에서 급여가 높은 순으로 정렬된 직원 목록.
SELECT * FROM employees
ORDER BY department_id, salary DESC;
 

 

 

 

📌 BAD 사용법

 

1. 정렬이 불필요한 경우

    • 정렬이 필요하지 않은 경우에도 ORDER BY를 사용하면 쿼리 성능이 저하될 수 있습니다.
-- 잘못된 예시
SELECT * FROM products
ORDER BY product_id;
 
    • product_id로 정렬하는 것이 의미가 없다면 ORDER BY 없이 데이터를 조회하는 것이 더 효율적입니다.

 

2. 대량 데이터에서 복잡한 정렬을 사용할 경우

    • 데이터 양이 많을 때 정렬을 여러 열로 복잡하게 사용하면 쿼리 실행 속도가 느려질 수 있습니다. 이 경우 인덱스를 설정하거나, 정렬된 결과가 실제로 필요한지 검토해야 합니다.

 

 

 

 

📌 데이터 예시

 

1. 직원 데이터를 사용한 급여 내림차순 정렬 예제

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    department_id INT,
    salary DECIMAL(10, 2)
);

INSERT INTO employees (id, name, department_id, salary) VALUES
(1, 'Alice', 1, 5000),
(2, 'Bob', 2, 4000),
(3, 'Charlie', 1, 4500),
(4, 'David', 3, 6000);

SELECT * FROM employees
ORDER BY salary DESC;
 
  • 이 쿼리는 급여가 높은 순서대로 직원들을 정렬합니다. 결과는 David, Alice, Charlie, Bob 순으로 출력됩니다.

 

 

 

2. 주문 데이터를 사용한 날짜별 정렬 예제

CREATE TABLE orders (
    id INT PRIMARY KEY,
    customer_name VARCHAR(255),
    order_date DATE,
    total_amount DECIMAL(10, 2)
);

INSERT INTO orders (id, customer_name, order_date, total_amount) VALUES
(1, 'Alice', '2024-09-01', 150.00),
(2, 'Bob', '2024-09-15', 200.00),
(3, 'Charlie', '2024-08-20', 300.00),
(4, 'David', '2024-10-01', 100.00);

SELECT * FROM orders
ORDER BY order_date DESC;
 
  • 이 쿼리는 order_date를 기준으로 최신 주문부터 정렬합니다. 결과는 David, Bob, Alice, Charlie 순으로 출력됩니다.

 

 

 

 

실무 경험상 간혹 이런 케이스가 필요할 때가 있습니다.

 

 

📌 SQL ORDER BY와 CASE 문 예제

ORDER BY와 CASE 문을 함께 사용하면 정렬 순서를 조건에 따라 더 세밀하게 제어할 수 있습니다.

특정 열의 값에 따라 정렬 순서를 커스터마이징하거나, 원하는 기준에 따라 데이터를 우선적으로

정렬할 수 있습니다.

 

  • 기본 문법
SELECT column_name1, column_name2, ...
FROM table_name
ORDER BY CASE
    WHEN condition1 THEN value1
    WHEN condition2 THEN value2
    ELSE value3
END;
 
    • CASE 문은 특정 조건에 따라 다른 값을 반환할 수 있으며, ORDER BY에서 이를 이용해 데이터의 정렬 순서를 조정할 수 있습니다.

 

  • 예제

1. 특정 상태 값을 기준으로 정렬

SELECT * FROM employees
ORDER BY CASE
    WHEN status = 'Manager' THEN 1
    WHEN status = 'Team Lead' THEN 2
    ELSE 3
END;
 
    • 이 쿼리는 status 값이 'Manager'인 경우를 가장 먼저, 'Team Lead'를 그 다음, 그 외의 경우를 마지막에 정렬합니다. 즉, status가 'Manager'인 직원들이 가장 먼저 나오게 됩니다.

 

2. 지역에 따라 우선순위를 두어 정렬

SELECT * FROM customers
ORDER BY CASE
    WHEN city = 'New York' THEN 1
    WHEN city = 'Los Angeles' THEN 2
    ELSE 3
END;
 
    • 이 쿼리는 city 값이 'New York'인 고객을 먼저 정렬하고, 그 다음 'Los Angeles'에 위치한 고객들을 정렬합니다. 그 외의 도시 고객들은 마지막에 배치됩니다.

 

3. 특정 가격대에 우선순위를 두어 정렬

SELECT * FROM products
ORDER BY CASE
    WHEN price < 50 THEN 1
    WHEN price BETWEEN 50 AND 100 THEN 2
    ELSE 3
END;
 
 
    • 이 쿼리는 가격이 50 미만인 제품을 먼저, 50에서 100 사이의 제품을 그 다음, 그 외의 가격대 제품을 마지막에 정렬합니다.

 

4. 마감일에 따라 우선순위를 두어 정렬

SELECT * FROM tasks
ORDER BY CASE
    WHEN due_date IS NULL THEN 2
    ELSE 1
END, due_date ASC;
 
  • 이 쿼리는 due_date가 NULL인(즉, 마감일이 지정되지 않은) 작업을 후순위로 두고, 나머지 작업들은 마감일 순서대로 오름차순 정렬합니다.

 

 

 

 

ORDER BY는 데이터를 정렬하여 보기 좋게 하거나 분석을 쉽게 하는 데 유용한 도구입니다.

하지만, 필요하지 않은 경우 사용을 피하거나, 대량의 데이터에 대해서는 정렬을 최소화하여 성능 문제를 피하는

것이 중요합니다.

 

반응형