12.3.2 비교 함수와 연산자
표 12.3 비교 연산자
| 이름 | 설명 |
|---|---|
BETWEEN ... AND ... | 값이 범위 내에 포함되어 있는지 확인합니다 |
COALESCE() | NULL이 아닌 첫 번째 인수를 반환합니다 |
<=> | NULL 안전 등가 연산자 |
= | 등가 (같음) 연산자 |
>= | 이상 (더 많다거나 같음) 연산자 |
> | 오른쪽 부등 (더 많은) 연산자 |
GREATEST() | 최대의 인수를 돌려줍니다 |
IN() | 값이 값 세트에 포함되어 있는지 확인합니다 |
INTERVAL() | 제 1 인수보다 작은 인수의 인덱스를 돌려줍니다 |
IS NOT NULL | NOT NULL 값 테스트 |
IS NOT | boolean에 대해 값을 테스트합니다 |
IS NULL | NULL 값 테스트 |
IS | boolean에 대해 값을 테스트합니다 |
ISNULL() | 인수가 NULL 여부를 테스트합니다 |
LEAST() | 최소의 인수를 돌려줍니다 |
<= | 다음 (보다 작거나 같음) 연산자 |
< | 왼쪽 부등 (더 적은) 연산자 |
LIKE | 단순한 패턴 일치 |
NOT BETWEEN ... AND ... | 값이 범위 내에 포함되어 있는지 확인합니다 |
!= , <> | 비항 (같지 않음) 연산자 |
NOT IN() | 값이 값 세트에 포함되어 있는지 확인합니다 |
NOT LIKE | 단순한 패턴 일치의 부정 |
STRCMP() | 2 개의 문자열을 비교합니다 |
비교 연산의 결과는 1 ( TRUE ), 0 ( FALSE ), 또는 NULL 값입니다. 이러한 연산은 숫자와 문자열 모두에서 작동합니다. 필요에 따라 문자열은 숫자, 숫자는 문자열로 자동 변환됩니다.
다음의 관계 비교 연산자를 사용하면 스칼라 피연산자뿐만 아니라 행 피연산자도 비교할 수 있습니다.
=> <> = <= <>! =
행 비교의 예는 섹션 13.2.10.5 "행 서브 쿼리" 를 참조하십시오.
이 절의 함수의 일부는 1 ( TRUE ), 0 ( FALSE ), 또는 NULL 이 아닌 값이 반환됩니다. 예를 들어, LEAST() 및 GREATEST() 입니다. 그러나 반환되는 값은 섹션 12.2 "수식 계산에서의 타입 변환" 에서 설명한 규칙에 따라 수행 된 비교 연산에 근거합니다.
CAST() 함수를 사용하면 비교 목적으로 값을 특정 형식으로 변환 할 수 있습니다. CONVERT() 을 사용하면 문자열 값을 다른 문자 집합으로 변환 할 수 있습니다. 섹션 12.10 「캐스트 함수 및 연산자 " 를 참조하십시오.
기본적으로 문자열 비교는 대소 문자를 구분하지 않으며 현재의 문자 세트가 사용됩니다. 디폴트는 latin1 (cp1252 서유럽 어)이며, 영어로도 작동합니다.
=동일한 :
mysql>
SELECT 1 = 0;-> 0 mysql>SELECT '0' = 0;-> 1 mysql>SELECT '0.0' = 0;-> 1 mysql>SELECT '0.01' = 0;-> 0 mysql>SELECT '.01' = 0.01;-> 1<=>NULL- 안전 등가. 이 연산자는=연산자와 같이 등가 비교가 실행되지만 두 피연산자가NULL이면NULL이 아닌1을 반환 피연산자가NULL의 경우는NULL이 아니고0이 반환됩니다.mysql>
SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;-> 1, 1, 0 mysql>SELECT 1 = 1, NULL = NULL, 1 = NULL;-> 1, NULL, NULL<>,!=같지 않음 :
mysql>
SELECT '.01' <> '0.01';-> 1 mysql>SELECT .01 <> '0.01';-> 0 mysql>SELECT 'zapp' <> 'zappp';-> 1<=더 작거나 같으면 :
mysql>
SELECT 0.1 <= 2;-> 1<더 적은 :
mysql>
SELECT 2 < 2;-> 0>=더 많은거나 같음 :
mysql>
SELECT 2 >= 2;-> 1>더 많은 :
mysql>
SELECT 2 > 2;-> 0ISboolean_valueboolean_value을TRUE,FALSE또는UNKNOWN할 수있는 boolean 값에 대한 값을 테스트합니다.mysql>
SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;-> 1, 1, 1IS NOTboolean_valueboolean_value을TRUE,FALSE또는UNKNOWN할 수있는 boolean 값에 대한 값을 테스트합니다.mysql>
SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;-> 1, 1, 0IS NULL값이
NULL여부를 테스트합니다.mysql>
SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;-> 0, 0, 1ODBC 프로그램과의 연계가 제대로 작동하도록 MySQL은
IS NULL을 사용할 때 다음과 같은 추가 기능이 지원됩니다.sql_auto_is_null변수가 1로 설정되어있는 경우 자동으로 생성 된AUTO_INCREMENT값을 제대로 삽입 문 뒤에 다음과 같은 형식의 문을 발행하면 그 값을 검색 할 수 있습니다.SELECT * FROMtbl_nameWHEREauto_colIS NULL문이 행을 반환하는 경우 반환되는 값은
LAST_INSERT_ID()함수를 호출 한 경우와 동일합니다. 여러 행을 삽입 한 후 반환 등에 대한 자세한 내용은 섹션 12.14 "정보 함수" 를 참조하십시오.AUTO_INCREMENT값을 제대로 삽입 할 수없는 경우,SELECT문은 행을 반환하지 않습니다.IS NULL비교를 사용하여AUTO_INCREMENT값을 취득하는 동작은sql_auto_is_null = 0을 설정하면 비활성화 할 수 있습니다. 섹션 5.1 "서버 시스템 변수" 를 참조하십시오.MySQL 5.6에서는
sql_auto_is_null의 기본값은 0입니다.NOT NULL로 선언 된DATE및DATETIME컬럼에서는 다음과 같은 문을 사용하여 특수한 일'0000-00-00'을 찾을 수 있습니다.SELECT * FROMtbl_nameWHEREdate_columnIS NULLODBC에서는
'0000-00-00'날짜 값을 지원하지 않기 때문에 일부 ODBC 응용 프로그램을 검색 할 때 이것이 필요합니다.Obtaining Auto-Increment Values 및 Connector / ODBC Connection Parameters 의
FLAG_AUTO_IS_NULL옵션에 대한 설명을 참조하십시오.
IS NOT NULL값이
NULL이 아닌 여부를 테스트합니다.mysql>
SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;-> 1, 1, 0exprBETWEENminANDmaxexpr가min보다 크거나 같고expr가max보다 작거나 같으면BETWEEN은1을 반환하고, 그렇지는0을 반환합니다. 모든 인수의 형태가 동일하다면, 이것은 식(와 동등합니다. 그렇지 않으면 섹션 12.2 "수식 계산에서의 타입 변환" 에서 설명한 규칙에 따라 형태 변환이 실행되지만, 3 개의 모든 인수에 적용됩니다.min<=exprANDexpr<=max)mysql>
SELECT 2 BETWEEN 1 AND 3, 2 BETWEEN 3 and 1;-> 1 0 mysql>SELECT 1 BETWEEN 2 AND 3;-> 0 mysql>SELECT 'b' BETWEEN 'a' AND 'c';-> 1 mysql>SELECT 2 BETWEEN 2 AND '3';-> 1 mysql>SELECT 2 BETWEEN 2 AND 'x-3';-> 0날짜 또는 시간 값과 함께
BETWEEN을 사용했을 때의 결과를 최적화하려면CAST()를 사용하여 명시 적으로 값을 원하는 데이터 형식으로 변환합니다. 예 :DATETIME을 두DATE값과 비교하려면DATE값을DATETIME값으로 변환합니다.DATE에 비해'2001-1-1'등의 문자열 상수를 사용하는 경우 문자열을DATE로 변환합니다.exprNOT BETWEENminANDmax이것은
NOT (와 동일합니다.exprBETWEENminANDmax)COALESCE(value,...)목록의 첫 번째 비
NULL값을 반환합니다. 비NULL값이 없으면NULL을 반환합니다.mysql>
SELECT COALESCE(NULL,1);-> 1 mysql>SELECT COALESCE(NULL,NULL,NULL);-> NULLGREATEST(value1,value2,...)2 개 이상의 인수가있는 경우 최대 (최대 값) 인수를 돌려줍니다. 인수는
LEAST()의 규칙과 동일한 규칙을 사용하여 비교됩니다.mysql>
SELECT GREATEST(2,0);-> 2 mysql>SELECT GREATEST(34.0,3.0,5.0,767.0);-> 767.0 mysql>SELECT GREATEST('B','A','C');-> 'C'인수 중 하나가
NULL인 경우,GREATEST()는NULL을 반환합니다.exprIN (value,...)expr이IN목록의 값 중 하나와 동일한 경우는1을 반환하고, 그렇지 않으면0을 반환합니다. 모든 값이 정수의 경우는expr의 형태에 따라 평가되고 정렬됩니다. 그 때 항목의 검색은 바이너리 검색을 사용하여 이루어집니다. 즉,IN값의 목록이 모두 정수로 구성되어있는 경우,IN는 매우 빠릅니다. 그렇지 않으면 섹션 12.2 "수식 계산에서의 타입 변환" 에서 설명한 규칙에 따라 형태 변환이 실행되지만, 모든 인수에 적용됩니다.mysql>
SELECT 2 IN (0,3,5,7);-> 0 mysql>SELECT 'wefwf' IN ('wee','wefwf','weg');-> 1인용 된 값 (문자열 등)과 동봉되지 않은 값 (숫자 등)의 비교 규칙이 다르기 때문에
IN목록에 인용 된 값으로 포위되지 않은 값을 결코 혼동하지 바랍니다. 따라서, 형태를 혼동하면 일관성이없는 결과가 될 가능성이 있습니다. 예를 들어,IN식을 다음과 같이 묘사하지 마십시오.SELECT val1 FROM tbl1 WHERE val1 IN (1,2 'a');대신 다음과 같이 설명합니다.
SELECT val1 FROM tbl1 WHERE val1 IN ( '1', '2', 'a');IN목록의 값의 수는max_allowed_packet값에 의해서만 제한됩니다.SQL 표준을 준수하기 위해 좌측의식이
NULL인 경우뿐만 아니라 목록에 일치가 없거나 목록에있는 표현식 중 하나가NULL인 경우에도IN은NULL을 반환합니다.IN()구문은 특정 타입의 서브 쿼리를 작성할 때에도 사용할 수 있습니다. 섹션 13.2.10.3 "ANY, IN 또는 SOME을 사용한 서브 쿼리" 를 참조하십시오.exprNOT IN (value,...)이것은
NOT (와 동일합니다.exprIN (value,...))ISNULL(expr)expr가NULL의 경우,ISNULL()은1을 반환하고, 그렇지 않으면0을 반환합니다.mysql>
SELECT ISNULL(1+1);-> 0 mysql>SELECT ISNULL(1/0);-> 1=대신ISNULL()를 사용하면 값이NULL인지 여부를 테스트 할 수 있습니다. (=를 사용하여 값을NULL과 비교하면 항상 false가 발생할 수 있습니다.)ISNULL()함수는IS NULL비교 연산자와 일부 특수한 동작을 공유합니다.IS NULL에 대한 설명을 참조하십시오.INTERVAL(N,N1,N2,N3,...)N<N1의 경우는0을 돌려 주어,N<N2등의 경우에는1을 반환하고,N이NULL의 경우는-1을 돌려줍니다. 모든 인수는 정수로 처리됩니다. 이 함수가 제대로 작동하려면N1<N2<N3<...<Nn으로 할 필요가 있습니다. 이것은 바이너리 검색이 사용되는 것이 이유입니다 (매우 빠르게).mysql>
SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);-> 3 mysql>SELECT INTERVAL(10, 1, 10, 100, 1000);-> 2 mysql>SELECT INTERVAL(22, 23, 30, 44, 200);-> 0LEAST(value1,value2,...)2 개 이상의 인수가있는 경우 최소 (최소) 인수를 돌려줍니다. 인수는 다음 규칙을 사용하여 비교됩니다.
인수가
NULL이면 결과는NULL이됩니다. 비교는 필요 없습니다.반환 값이
INTEGER문맥에서 사용되는 경우, 또는 모든 인수가 정수이면 정수로 비교됩니다.반환 값이
REAL문맥에서 사용되는 경우, 또는 모든 인수가 실수 인 경우는 실수로 비교됩니다.인수가 숫자와 문자열이 혼합되어 구성되어있는 경우에는 숫자로 비교됩니다.
인수가 아닌 이진 (문자) 문자열의 경우 비 이진 문자열로 비교됩니다.
다른 모든 경우에는 인수는 이진 문자열로 비교됩니다.
mysql>
SELECT LEAST(2,0);-> 0 mysql>SELECT LEAST(34.0,3.0,5.0,767.0);-> 3.0 mysql>SELECT LEAST('B','A','C');-> 'A'일부 경계선 경우에는 위의 변환 규칙에서 비정상적인 결과가 생성 될 수 있습니다.
mysql>
SELECT CAST(LEAST(3600, 9223372036854775808.0) as SIGNED);-> -9223372036854775808이것은 MySQL이
9223372036854775808.0정수의 맥락에서 읽을 수 발생합니다. 정수 표현에서 값을 유지하는 데 충분하지 않기 때문에 부호있는 정수에 랩합니다.