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;
-> 0IS
boolean_value
boolean_value
을TRUE
,FALSE
또는UNKNOWN
할 수있는 boolean 값에 대한 값을 테스트합니다.mysql>
SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;
-> 1, 1, 1IS NOT
boolean_value
boolean_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 * FROM
tbl_name
WHEREauto_col
IS 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 * FROM
tbl_name
WHEREdate_column
IS 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, 0expr
BETWEENmin
ANDmax
expr
가min
보다 크거나 같고expr
가max
보다 작거나 같으면BETWEEN
은1
을 반환하고, 그렇지는0
을 반환합니다. 모든 인수의 형태가 동일하다면, 이것은 식(
와 동등합니다. 그렇지 않으면 섹션 12.2 "수식 계산에서의 타입 변환" 에서 설명한 규칙에 따라 형태 변환이 실행되지만, 3 개의 모든 인수에 적용됩니다.min
<=expr
ANDexpr
<=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
로 변환합니다.expr
NOT BETWEENmin
ANDmax
이것은
NOT (
와 동일합니다.expr
BETWEENmin
ANDmax
)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
을 반환합니다.expr
IN (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을 사용한 서브 쿼리" 를 참조하십시오.expr
NOT IN (value
,...)이것은
NOT (
와 동일합니다.expr
IN (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
정수의 맥락에서 읽을 수 발생합니다. 정수 표현에서 값을 유지하는 데 충분하지 않기 때문에 부호있는 정수에 랩합니다.