SQL `CASE` 구문을 이해하는 방법: 문법, 사용례 및 예제
Takashi Yamamoto
Infrastructure Engineer · Leapcell

Key Takeaways
- SQL
CASE
구문은 조건부 로직을 쿼리에 직접 추가합니다. - 데이터 분류, 변환 및 필터링에 효율적으로 사용됩니다.
- 적절한 사용은 SQL 가독성과 유연성을 향상시킵니다.
SQL CASE
구문은 SQL 쿼리 내에서 if-then-else 로직을 직접 구현할 수 있도록 하는 강력한 조건식입니다. 조건을 평가하고 해당 조건에 따라 특정 값을 반환하여 쿼리를 더욱 동적이고 유연하게 만들 수 있습니다.(https://leapcell.io/?lc_t=n_goselect)
구문
CASE
구문에는 두 가지 주요 형식이 있습니다.
- 단순
CASE
식: 결과를 결정하기 위해 식을 일련의 단순 식과 비교합니다.(https://leapcell.io/?lc_t=n_goselect)
CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE resultN END
- 검색된
CASE
식: 결과를 결정하기 위해 일련의 Boolean 식을 평가합니다.(https://leapcell.io/?lc_t=n_goselect)
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE resultN END
두 형식 모두에서 ELSE
절은 선택 사항입니다. 충족되는 조건이 없고 ELSE
가 제공되지 않으면 CASE
구문은 NULL
을 반환합니다.(https://leapcell.io/?lc_t=n_goselect)
사용 사례 및 예제
1. 데이터 분류
CASE
구문을 사용하여 특정 조건에 따라 데이터를 여러 그룹으로 분류할 수 있습니다.(https://leapcell.io/?lc_t=n_goselect)
SELECT TransactionID, Amount, CASE WHEN Amount < 1000 THEN 'Low' WHEN Amount >= 1000 AND Amount < 5000 THEN 'Medium' WHEN Amount >= 5000 THEN 'High' ELSE 'Unknown' END AS TransactionCategory FROM SalesTransactions;
이 쿼리는 Amount
를 기준으로 트랜잭션을 'Low', 'Medium' 또는 'High' 범주로 분류합니다.(https://leapcell.io/?lc_t=n_goselect)
2. NULL 값 처리
CASE
구문은 NULL
값을 더 의미 있는 정보로 대체하여 관리하는 데 도움이 될 수 있습니다.(https://leapcell.io/?lc_t=n_goselect)
SELECT CustomerID, OrderDate, CASE WHEN OrderDate IS NULL THEN 'No Order Date' ELSE 'Order Placed' END AS OrderStatus FROM Orders;
이 쿼리는 NULL
OrderDate
가 있는 주문을 'No Order Date'로, 나머지는 'Order Placed'로 레이블을 지정합니다.(https://leapcell.io/?lc_t=n_goselect)
3. 집계된 열 생성
집계 함수 내에서 CASE
를 사용하여 조건부 집계를 계산할 수 있습니다.
SELECT Department, COUNT(*) AS TotalEmployees, SUM(CASE WHEN Gender = 'Male' THEN 1 ELSE 0 END) AS MaleEmployees, SUM(CASE WHEN Gender = 'Female' THEN 1 ELSE 0 END) AS FemaleEmployees FROM Employees GROUP BY Department;
이 쿼리는 총 직원 수를 계산하고 각 부서별로 성별로 분류합니다.
4. 조건부 정렬
CASE
구문을 ORDER BY
절에서 사용하여 데이터를 조건부로 정렬할 수 있습니다.
SELECT CustomerName, City, Country FROM Customers ORDER BY CASE WHEN City IS NULL THEN Country ELSE City END;
이 쿼리는 고객을 City
별로 정렬하지만 City
가 NULL
이면 Country
별로 정렬합니다.(https://leapcell.io/?lc_t=n_goselect)
5. WHERE 절의 조건부 필터링
WHERE
절에서 CASE
를 사용하여 복잡한 필터링 로직을 적용할 수 있습니다.
SELECT * FROM Projects WHERE ProjectID = CASE @Condition WHEN 1 THEN 1 WHEN 2 THEN 2 WHEN 3 THEN 3 ELSE ProjectID END;
이 쿼리는 @Condition
매개변수에 의해 제공되는 동적 조건을 기반으로 프로젝트를 필터링합니다.(https://leapcell.io/?lc_t=n_goselect)
모범 사례
-
일치하지 않는 조건을 처리하려면
ELSE
사용:WHEN
조건이 충족되지 않는 경우를 처리하려면 항상ELSE
절을 포함하십시오. 이렇게 하면 예기치 않은NULL
결과가 방지됩니다.(https://leapcell.io/?lc_t=n_goselect) -
조건을 상호 배타적으로 유지:
WHEN
조건이 상호 배타적인지 확인하여 결과의 모호성을 방지합니다. -
가독성을 위해
CASE
사용: 복잡한 조건부 로직을 처리할 때CASE
구문을 사용하면 중첩된IF
구문 또는 여러OR
조건에 비해 SQL 쿼리의 가독성과 유지 관리성이 향상될 수 있습니다.(https://leapcell.io/?lc_t=n_goselect)
결론
SQL CASE
구문은 쿼리에 조건부 로직을 도입할 수 있는 다재다능한 도구입니다. CASE
를 이해하고 효과적으로 활용하면 SQL 구문 내에서 복잡한 데이터 변환, 집계 및 필터링을 직접 수행하여 더욱 효율적이고 읽기 쉬운 코드를 만들 수 있습니다.(https://leapcell.io/?lc_t=n_goselect)
FAQs
SQL 쿼리에서 if-then-else 로직을 허용합니다.
동적 데이터 분류 및 조건부 결과를 가능하게 합니다.
일치하지 않는 조건을 처리하고 예기치 않은 NULL을 방지하기 위해.
Leapcell은 백엔드 프로젝트 호스팅을 위한 최고의 선택입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무료로 무제한 프로젝트 배포
- 사용량에 대해서만 지불하십시오. 요청이나 요금이 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼 지불하십시오.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 고도의 동시성을 쉽게 처리할 수 있도록 자동 확장합니다.
- 운영 오버헤드가 없어 구축에만 집중할 수 있습니다.
설명서에서 자세히 알아보십시오!
X에서 팔로우하세요: @LeapcellHQ