12.4 제어 흐름 함수
표 12.6 흐름 제어 연산자
| 이름 | 설명 |
|---|---|
CASE | CASE 연산자 |
IF() | If / else 구문 |
IFNULL() | Null if / else 구문 |
NULLIF() | expr1 = expr2의 경우 NULL을 반환합니다 |
CASEvalueWHEN [compare_value] THENresult[WHEN [compare_value] THENresult...] [ELSEresult] ENDCASE WHEN [condition] THENresult[WHEN [condition] THENresult...] [ELSEresult] END첫 번째 버전은
의 경우value=compare_valueresult가 반환됩니다. 두 번째 버전에서는 true 인 첫 번째 조건의 결과가 반환됩니다. 일치하는 결과 값이 없었던 경우는,ELSE후 결과를 반환하고ELSE부분이없는 경우는NULL이 반환됩니다.mysql>
SELECT CASE 1 WHEN 1 THEN 'one'->WHEN 2 THEN 'two' ELSE 'more' END;-> 'one' mysql>SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;-> 'true' mysql>SELECT CASE BINARY 'B'->WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;-> NULLCASE식의 반환 형식은 모든 반환 호환 집약적이지만, 사용되는 문맥에 따라 달라집니다. 문자열의 컨텍스트에서 사용되는 경우, 결과는 문자열로 반환됩니다. 숫자 컨텍스트에서 사용되는 경우는 결과가 10 진수, 실수 또는 정수 값으로 반환됩니다.참고여기에 표시된
CASE식의 구문은 저장 프로그램 내부에서 사용하기 위해 섹션 13.6.5.1 "CASE 구문" 에서 설명한 SQLCASE명령문의 구문은 약간 다릅니다.CASE명령문은ELSE NULL절을 가질 수 없으며,END가 아니라END CASE로 종료합니다.IF(expr1,expr2,expr3)expr1이TRUE(및expr1<> 0)의 경우expr1<> NULLIF()는expr2를 반환합니다. 그렇지 않으면expr3을 반환합니다.IF()는 사용되는 컨텍스트에 따라 숫자 또는 문자열 값을 반환합니다.mysql>
SELECT IF(1>2,2,3);-> 3 mysql>SELECT IF(1<2,'yes','no');-> 'yes' mysql>SELECT IF(STRCMP('test','test1'),'no','yes');-> 'no'expr2와expr3중 하나만이 명시 적으로NULL인 경우,IF()함수의 결과 유형은 비NULL식의 형태가됩니다.IF()의 디폴트의 반환 값 (임시 테이블에 저장 될 때 중요 해지는 경우가 있습니다)는 다음과 같이 계산됩니다.식 반환 값 expr2또는expr3문자열을 반환문자열 expr2또는expr3은 부동 소수점 값을 반환부동 소수점 expr2또는expr3는 정수를 반환정수 expr2와expr3모두 문자열에서 두 가지 문자열에서 대소 문자를 구분하는 경우는 결과도 대소 문자를 구분합니다.참고IF문도 있지만, 여기에서 설명되는IF()함수와는 다릅니다. 섹션 13.6.5.2 "IF 구문" 을 참조하십시오.IFNULL(expr1,expr2)expr1이NULL이 아니면IFNULL()은expr1을 반환하고, 그렇지 않으면expr2를 반환합니다.IFNULL()은 사용 된 문맥에 따라 숫자 또는 문자열 값을 반환합니다.mysql>
SELECT IFNULL(1,0);-> 1 mysql>SELECT IFNULL(NULL,10);-> 10 mysql>SELECT IFNULL(1/0,10);-> 10 mysql>SELECT IFNULL(1/0,'yes');-> 'yes'IFNULL(의 디폴트의 결과 값은expr1,expr2)STRING,REAL또는INTEGER의 순서로 두 표현식보다 "일반적인"입니다. 식이나 MySQL이 임시 테이블의IFNULL()에서 반환 된 값을 내부에 저장해야하는 위치에 따라 테이블의 대문자와 소문자를 고려하십시오.mysql>
CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;mysql>DESCRIBE tmp;+ ------- + -------------- + ------ + ----- + --------- + --- ---- + | Field | Type | Null | Key | Default | Extra | + ------- + -------------- + ------ + ----- + --------- + --- ---- + | test | varbinary (4) | NO | | | | + ------- + -------------- + ------ + ----- + --------- + --- ---- +이 예제에서는
test컬럼의 형태는VARBINARY(4)입니다.NULLIF(expr1,expr2)가 true의 경우는expr1=expr2NULL을 반환하고, 그렇지 않으면expr1을 반환합니다. 이것은CASE WHEN와 같습니다.expr1=expr2THEN NULL ELSEexpr1ENDmysql>
SELECT NULLIF(1,1);-> NULL mysql>SELECT NULLIF(1,2);-> 1참고인수가 동일하지 않은 경우는 MySQL에서
expr1이 2 회 평가됩니다.