Loading...
MySQL 9.5 Reference Manual 9.5의 14.5 Flow Control Functions의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Table 14.7 Flow Control Operators
| Name | Description |
|---|---|
CASE | Case 연산자 |
IF() | if/else 구성 |
IFNULL() | NULL if/else 구성 |
NULLIF() | expr1 = expr2 이면 NULL 반환 |
CASE WHEN condition THEN result [WHEN condition THEN result ...] [ELSE result] END
첫 번째 CASE 구문은 참이 되는 첫 번째
value=compare_value
비교에 대해 result 를 반환합니다. 두 번째 구문은 참인 첫 번째 condition에 대해 result를 반환합니다. 어떤 비교나
condition도 참이 아니라면, ELSE 뒤의 result가
반환되며, ELSE 부분이 없으면
NULL 이 반환됩니다.
참고
여기에서 설명하는 CASE operator 의 구문은 저장 프로그램 내부에서 사용하는 SQL
CASE statement 의 구문과 약간 다릅니다. 저장 프로그램용
CASE statement는
ELSE NULL 절을 가질 수 없으며,
END 대신 END CASE 로 끝납니다.
CASE
expression 결과의 반환 타입은 모든 result 값의 집계 타입입니다:
모든 타입이 숫자형이면 집계 타입도 숫자형입니다:
인자가 하나라도 double precision이면 결과는 double precision입니다.
그 외의 경우 결과는 정수 타입입니다 (한 가지 예외를 제외하고):
모든 정수 타입이 모두 signed 이거나 모두
unsigned이면, 결과는 동일한 부호를 가지며
정밀도는 지정된 모든 정수 타입
(즉,
TINYINT,
SMALLINT,
MEDIUMINT,
INT, 또는
BIGINT) 중
정밀도가 가장 높은 타입과 같습니다.
signed 정수 타입과 unsigned
정수 타입이 섞여 있으면, 결과는 signed이고
정밀도가 더 높을 수 있습니다. 예를 들어 타입이
signed INT 와
unsigned INT 이면,
결과는 signed
BIGINT 입니다.
예외는 unsigned
BIGINT 이 다른 어떤 signed 정수 타입과
결합되는 경우입니다. 결과는
정밀도가 충분하고 스케일이 0인
DECIMAL 입니다.
모든 타입이 BIT 이면
결과도 BIT 입니다. 그렇지 않으면
BIT 인자는
BIGINT 와 비슷하게 처리됩니다.
모든 타입이 YEAR 이면
결과도 YEAR 입니다. 그렇지 않으면
YEAR 인자는
INT 와 비슷하게 처리됩니다.
모든 타입이 문자 문자열
( CHAR 또는
VARCHAR)이면, 결과는
피연산자의 문자 길이 중 가장 긴 길이에 의해
최대 길이가 결정되는
VARCHAR 입니다.
모든 타입이 문자 또는 바이너리 문자열이면, 결과는
VARBINARY 입니다.
모든 타입이 시계열 타입이면 결과는 시계열 타입입니다:
모든 타입이 GEOMETRY 이면
결과는 GEOMETRY 입니다.
그 밖의 모든 타입 조합에 대해, 결과는
VARCHAR 입니다.
리터럴 NULL 피연산자는
타입 집계에서 무시됩니다.
1mysql> SELECT CASE 1 WHEN 1 THEN 'one' 2 -> WHEN 2 THEN 'two' ELSE 'more' END; 3 -> 'one' 4mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; 5 -> 'true' 6mysql> SELECT CASE BINARY 'B' 7 -> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END; 8 -> NULL
expr1 이 TRUE
(expr1 <> 0 이고 expr1 IS NOT NULL 인 경우)이면, IF()는
expr2 를 반환합니다. 그렇지 않으면
expr3 를 반환합니다.
참고
IF() function 과는 다른 IF statement 도 있습니다. 자세한 내용은
Section 15.6.5.2, “IF Statement” 를 참조하십시오.
expr2 와
expr3 중 하나만 명시적으로
NULL 인 경우,
IF() function의 결과 타입은
NULL 이 아닌 expression의 타입입니다.
IF()의 기본 반환 타입은 (임시 테이블에 저장되는 경우처럼 중요할 수 있으며) 다음과 같이 계산됩니다:
expr2 또는
expr3 가 문자열을 생성하면,
결과는 문자열입니다.
expr2 와
expr3 가 모두 문자열이면,
두 문자열 중 하나라도 대소문자 구분이면 결과도
대소문자 구분입니다.
expr2 또는
expr3 가 부동 소수점
값을 생성하면, 결과는 부동 소수점 값입니다.
expr2 또는
expr3 가 정수를 생성하면,
결과는 정수입니다.
1mysql> SELECT IF(1>2,2,3); 2 -> 3 3mysql> SELECT IF(1<2,'yes','no'); 4 -> 'yes' 5mysql> SELECT IF(STRCMP('test','test1'),'no','yes'); 6 -> 'no'
expr1 이
NULL 이 아니면,
IFNULL()는
expr1 을 반환하고, 그렇지 않으면
expr2 를 반환합니다.
1mysql> SELECT IFNULL(1,0); 2 -> 1 3mysql> SELECT IFNULL(NULL,10); 4 -> 10 5mysql> SELECT IFNULL(1/0,10); 6 -> 10 7mysql> SELECT IFNULL(1/0,'yes'); 8 -> 'yes'
IFNULL(expr1,expr2)의 기본 반환 타입은 두 expression 중 “더 일반적인” 것으로,
순서는 STRING, REAL,
INTEGER 입니다. expression 기반 테이블이거나 MySQL이 내부적으로
IFNULL()가 반환한 값을
임시 테이블에 저장해야 하는 경우를 생각해 보십시오:
1mysql> CREATE TABLE tmp SELECT IFNULL(1,'test') AS test; 2mysql> DESCRIBE tmp; 3+-------+--------------+------+-----+---------+-------+ 4| Field | Type | Null | Key | Default | Extra | 5+-------+--------------+------+-----+---------+-------+ 6| test | varbinary(4) | NO | | | | 7+-------+--------------+------+-----+---------+-------+
이 예에서 test
column의 타입은 문자열 타입인
VARBINARY(4) 입니다.
expr1 = expr2 가 참이면
NULL 을 반환하고, 그렇지 않으면
expr1 을 반환합니다. 이는
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END 와 동일합니다.
반환 값의 타입은 첫 번째 인자의 타입과 같습니다.
1mysql> SELECT NULLIF(1,1); 2 -> NULL 3mysql> SELECT NULLIF(1,2); 4 -> 1
참고
인자가 같지 않은 경우 MySQL은
expr1 을 두 번 평가합니다.
이들 function 각각에 대해, 첫 번째 인자가 두 번째 인자에 사용되는 문자 집합과 정렬 규칙에 존재하는 문자만 포함하고 (그리고 두 번째 인자가 상수인) 경우, 비교를 수행하기 위해 두 번째 인자의 문자 집합과 정렬 규칙이 사용됩니다. 시스템 변수 값은 동일한 문자와 정렬 규칙을 가진 컬럼 값으로 처리됩니다.
이러한 function을 시스템 변수와 함께 사용하는 일부 쿼리는 그 결과로 Illegal mix of collations 오류와 함께 거부될 수 있습니다. 이런 경우, 시스템 변수를 올바른 문자 집합과 정렬 규칙으로 캐스트해야 합니다.
14.4.4 Assignment Operators
14.6 Numeric Functions and Operators