SQL의 CASE
는 WHEN과THEN과 함께 쓰여 파이썬의 if
와 같은 역할을 한다.
CASE WHEN 조건 THEN 식
WHEN 의 조건에는 참과 거짓을 반환하는 조건식을 쓴다. 조건을 만족해 참을 반환하면 THEN에 있는 식이 처리된다. WHEN과 THEN을 복수로 써서 조건을 여러개 지정할 수도 있다.
CASE WHEN 조건 THEN 식
ELSE 식
어떤 조건도 만족하지 못했을 경우 ELSE
에 있는 식이 처리된다. 이 때 사용되는 ELSE는 생략이 가능하다. 생략했을 땐 ELSE NULL로 간주된다.
예제 - 단순 CASE
1
2
3
4
5
6
SELECT a AS "코드",
CASE
WHEN a=1 THEN '남자'
WHEN a=2 THEN '여자'
ELSE '미지정'
END AS "성별" FROM test_table;
이 때 ELSE에 걸리는 데이터는 ‘a 컬럼이 1 또는 2가 아닌 경우’이다.
CASE 뒤에 대상을 적어도 된다.
1
2
3
4
5
6
SELECT a AS "코드",
CASE a
WHEN 1 THEN '남자'
WHEN 2 THEN '여자'
ELSE '미지정'
END AS "성별" FROM test_table;
1
2
3
4
5
6
SELECT a AS "코드", "성별" =
CASE a
WHEN 1 THEN "남자"
WHEN 2 THEN "여자"
ELSE "미지정"
END FROM test_table;
세 코드 모두 같은 테이블을 반환한다.
예제2 - 삼각형 판별하기
1
2
3
4
5
6
7
SELECT CASE
WHEN A = B AND B = C THEN 'Equilateral'
WHEN A + B <= C OR A + C <= B OR B + C <= A THEN 'Not A Triangle'
WHEN A = B OR A = C OR B = C THEN 'Isosceles'
ELSE 'Scalene'
END
FROM Triangles
CASE
문에서는 조건의 순서를 유의해야 한다. 세 변이 각 20, 20, 40 인 경우엔 두번째 조건과 세번째 조건을 동시에 만족하지만 Not A Triangle
이 되어야하기 때문에 두번째 조건이 세번째 조건보다 상위의 조건이 된다. 만약 한 조건을 충족한다면 그 이후의 조건에는 자동으로 해당하지 않게된다.
- CASE는 SELECT를 비롯한
WHERE
,ORDER BY
와도 함께 사용할 수 있다. - ELSE를 생략할 경우
ELSE NULL
이 되므로 주의해야 한다. 되도록 ELSE는 생략하지 않고 지정한다. - 조건이 여러개가 올때는 어떤 조건이 우선되어야 할지 유의하여 순서를 정한다.