흐름 제어
MySQL은 프로그램이 순차적인 흐름을 제어해야 할 때 사용할 수 있는 다양한 연산자와 함수를 제공한다.
CASE
CASE 연산자는 값을 서로 비교하거나, 표현식의 논리값에 따라 다른 값을 반환한다.
-- 문법
-- 1.
CASE value
WHEN [compare_value] THEN result
[WHEN [compare_value] THEN result]...
[ELSE result]
END
-- 2.
CASE
WHEN [condition] THEN result
[WHEN [condition] THEN result]...
[ELSE result]
END
첫 번째 CASE 문법에서는 value와 compare_value 값이 같으면, THEN 절의 result 값을 반환한다.
만약 서로 값이 같지 않으면, ELSE 절의 result 값을 반환한다.
이때 ELSE 절이 없으면, NULL을 반환한다.
두 번째 CASE 문법에서는 condition의 논리값이 참이면, THEN 절의 result 값을 반환한다.
만약 논리값이 거짓이라면, ELSE 절의 result 값을 반환한다.
이때 ELSE 절이 없으면, NULL을 반환한다.
SELECT CASE 0
WHEN 0 THEN 'zero'
WHEN 1 THEN 'one'
ELSE 'more'
END;
-- 실행 결과 : zero
-- CASE문 사용 방법
CASE
WHEN 조건1 THEN 결과값1
WHEN 조건2 THEN 결과값2
WHEN 조건N THEN 결과값N
ELSE 결과값
END
- WHEN - THEN은 항상 같이 사용 되어야 한다.
- WHEN - THEN은 여러개 사용이 가능하다.
- ELSE가 존재하면 모든 WHEN - THEN 조건이 TRUE(참)이 아닌 경우 ELSE의 결과값을 반환한다.
- ELSE가 없고, 조건이 TRUE(참)이 아니면 NULL을 반환한다.
IF()
IF() 함수는 첫 번째 인수로 전달받은 표현식의 논리값에 따라 다른 값을 반환한다.
IF() 함수의 원형은 다음과 같다.
IF(expr1, expr2, expr3)
만약 expr1이 참이면 expr2를 반환하고, 거짓이면 expr3를 반환한다.
SELECT IF(0 < 1, 'yes', 'no');
-- 실행 결과 : yes
IFNULL()
IFNULL() 함수는 첫 번째 인수로 전달받은 값이 NULL인지 아닌지를 검사하여 다른 값을 반환한다.
IFNULL() 함수의 원형은 다음과 같다.
IFNULL(expr1, expr2)
만약 expr1의 값이 NULL이 아니면 expr1 그 자체를 반환하고, NULL이면 expr2를 반환한다.
SELECT IFNULL(NULL, '전달받은 값이 null입니다.');
-- 실행 결과 : 전달받은 값이 null입니다.
NULLIF()
NULLIF() 함수는 인수로 전달받은 두 값이 서로 같은지를 검사하여 다른 값을 반환한다.
NULLIF() 함수의 원형은 다음과 같다.
NULLIF(expr1, expr2)
만약 expr1과 expr2의 값이 서로 같으면 NULL을 반환하고, 같지 않으면 expr1을 반환한다.
따라서 NULLIF() 함수는 다음 예제의 CASE 문과 같은 동작을 수행한다.
CASE
WHEN expr1 = expr2
THEN NULL
ELSE expr1
END
SELECT NULLIF(3, 3);
-- 실행 결과 : NULL
'Programming > MySQL' 카테고리의 다른 글
[MySQL] 타입 변환 BINARY, CAST(), CONVERT() (0) | 2022.09.08 |
---|---|
[MySQL] 패턴 매칭 LIKE, REGEXP (0) | 2022.09.08 |
[MySQL] 비트 연산자 (bitwise operator) (0) | 2022.09.08 |
[MySQL] 논리 연산자 (logical operator) (0) | 2022.09.08 |
[MySQL] 비교 연산자 (comparison operator) (0) | 2022.09.08 |