이전 개발자가 작성한 코드를 작성 중이며 쿼리에서 다음과 같이 말합니다.
WHERE p.name <=> NULL
<=>
이 쿼리에서 무엇을 의미합니까? 그것은 동등한 것 =
입니까? 아니면 구문 오류입니까?
그러나 오류나 예외는 표시되지 않습니다. 나는 이미 MySQL 에서 <>
= !=
를 알고있다 .
답변
TL; DR
그것은의 NULL
안전과 동일 연산자.
정규 =
연산자 와 같이 두 값이 비교되고 결과는 0
(같지 않음) 또는 1
(같음)입니다. 다른 말로 'a' <=> 'b'
하면 yields 0
and 'a' <=> 'a'
yields 1
입니다.
정규 =
연산자 와 달리 값은 NULL
특별한 의미가 없으므로 NULL
가능한 결과를 얻지 못합니다 . 그래서 : 'a' <=> NULL
수율 0
및 NULL <=> NULL
수율 1
.
유용성
이것은 두 피연산자 모두를 포함 할 수 있고 두 열간 NULL
에 일관된 비교 결과가 필요할 때 유용 할 수 있습니다 .
또 다른 유스 케이스는 다음과 같이 준비된 명령문입니다.
... WHERE col_a <=> ? ...
여기서 자리 표시자는 스칼라 값이거나 NULL
쿼리에 대한 내용을 변경할 필요가 없습니다.
관련 연산자
게다가 <=>
에 대해 비교하는 데 사용할 수있는 두 개의 다른 연산자도있다 NULL
, 즉,IS NULL
및 IS NOT NULL
; 그것들은 ANSI 표준의 일부이므로 <=>
MySQL 과는 달리 다른 데이터베이스에서 지원됩니다 .
당신은 그것들을 MySQL의 전문화로 생각할 수 있습니다 <=>
:
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
이를 바탕으로 특정 쿼리 (조각)를보다 이식성있게 변환 할 수 있습니다.
WHERE p.name IS NULL
지원하다
SQL : 2003 표준은 이것에 대한 술어를 도입했으며, 이는 MySQL의 <=>
연산자 와 정확히 다음과 같은 형식으로 작동합니다.
IS [NOT] DISTINCT FROM
다음은 보편적으로 지원되지만 상대적으로 복잡합니다.
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1
답변
이다 <=> NULL-safe equal to operator
이 연산자는 = 연산자와 같은 동등 비교를 수행하지만 두 피연산자가 모두 NULL이면 NULL 대신 1을 반환하고 하나의 피연산자가 NULL이면 NULL 대신 0을 반환합니다.
여기를 참조하십시오 설명서는
샘플 :
IS NOT NULL을 사용해야합니다. (비교 연산자 =와 <>는 둘 다 표현식의 양쪽에 UNKNOWN을 NULL로 제공합니다.)
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
널 안전 동등 연산자를 무시할 수도 있지만 이는 표준 SQL이 아닙니다.
SELECT *
FROM table
WHERE NOT (YourColumn <=> NULL);
답변
그것은 인 NULL 안전한 동등 연산자
<=> 연산자는 NULL 값을 필드와 비교하는 데 사용됩니다. 정상 = (같음) 인 경우 비교 값 중 하나가 NULL 인 경우 연산자는 NULL을 리턴합니다. <=> 연산자를 사용하면 true 또는 false가 반환됩니다. <=> 연산자는 IS 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
편집 : – ( 매우 늦게 언급 한 가지 중요한 측면 메모를 추가 할 수 있지만 하지 <=> 뿐만 아니라 )
참고 사항 :-
NOT <=>
NOT <=>의 요점이 하나 더 있습니다필드와 NULL 값을 비교하는 데 사용되는 있습니다. 정상인 경우! = 또는 <> (같지 않음) 비교 값 중 하나가 NULL 인 경우 연산자는 NULL을 반환합니다. NOT을 <=>에 적용하면 연산자가 true 또는 false를 반환합니다. <=> 연산자에 적용되지 않음은 IS NOT NULL과 같습니다.
예:-
SELECT NULL != NULL, //--Result is NULL
NOT NULL <=> NULL, //--Result is 0
NULL IS NOT NULL; //--Result is 0
답변
<=>
MySQL의 null 안전 “같음”연산자입니다. 매뉴얼에서 :
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
답변
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
의의 :
NULL 값과 NULL이 아닌 값을 비교하면 NULL이됩니다. 값이 널인지 확인하려는 경우.
Equal 연산자 (<=>)는 NULL을 일반 값으로 간주하므로 두 값이 모두 NULL이면 1 (NULL 아님)을 반환하고 값 중 하나가 NULL이면 0 (NULL 아님)을 반환합니다.
예 :
SELECT NULL <=> NULL -- 1
SELECT TRUE <=> TRUE -- 1
SELECT col1 <=> col2 FROM myTable
답변
<=>
은 IS NULL 안전한 동등 연산자 . a <=> b
쓰기와 동일합니다.
CASE
WHEN a IS NULL AND b IS NULL THEN 1 -- both operands null then 1
WHEN a IS NULL OR b IS NULL THEN 0 -- one operand is null then 0
ELSE a = b -- else behave like normal = operator
END
죄송합니다 AND/OR IS (NOT) NULL
. 이 연산자를 대신 사용해야하는 적절한 이유를 찾지 못했습니다 . 예를 들어, 예 WHERE p.name <=> NULL
는 WHERE p.name IS NULL
입니다.
답변
로부터 MySQL의 문서 :
NULL 안전 동등 이 연산자는 = 연산자와 같은 동등 비교를 수행하지만 두 피연산자가 모두 NULL이면 NULL 대신 1을 반환하고 하나의 피연산자가 NULL이면 NULL 대신 0을 반환합니다.
<=>
연산자 를 사용하는 예 는 다음과 같습니다.
SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
다음을 반환합니다.
1, 1, 0
정규 =
연산자 의 예는 다음과 같습니다.
SELECT 1 = 1, NULL = NULL, 1 = NULL;
다음을 반환합니다.
1, NULL, NULL
<=>
연산자는 매우 비슷합니다 =
제외하고, 운영자 <=>
반환하지 않습니다NULL