MySQL에서이 연산자 <=>는 무엇입니까?
이전 개발자가 작성한 코드를 작성 중이며 쿼리에서 다음과 같이 말합니다.
WHERE p.name <=> NULL
<=>
이 쿼리에서 무엇을 의미합니까? 그것은 동등한 것 =
입니까? 아니면 구문 오류입니까?
그러나 오류나 예외는 표시되지 않습니다. 나는 이미 MySQL 에서 <>
= !=
를 알고있다 .
=
연산자 와의 유사성
정규 =
연산자 와 같이 두 값이 비교되고 결과는 0
(같지 않음) 또는 1
(같음)입니다. 다른 말로 'a' <=> 'b'
하면 yields 0
and 'a' <=> 'a'
yields 1
입니다.
=
연산자 와의 차이점
정규 =
연산자 와 달리 값은 NULL
특별한 의미가 없으므로 NULL
가능한 결과를 얻지 못합니다 . 그래서 : 'a' <=> NULL
수율 0
및 NULL <=> NULL
수율 1
.
반대로 =
, 이에 의해 'a' = NULL
수율 NULL
에도 NULL = NULL
수율 NULL
; BTW는 MySQL의 거의 모든 연산자와 함수가 이러한 방식으로 작동 NULL
합니다. 비교 는 기본적으로 정의되어 있지 않기 때문 입니다.
유용성
이것은 두 피연산자 모두를 포함 할 수 있고 두 열간 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
이다 <=> 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 <=>
필드와 NULL 값을 비교하는 데 사용되는 NOT <=> 포인트가 하나 더 있습니다. 정상인 경우! = 또는 <> (같지 않음) 비교 값 중 하나가 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이됩니다. 값이 널인지 확인하려는 경우.
The Equality operator(<=>) which considers NULL as a normal value, so it returns 1 (not NULL) if both values are NULL and returns 0 (not NULL) if one of the values is NULL:
eg
SELECT NULL <=> NULL -- 1
SELECT TRUE <=> TRUE -- 1
SELECT col1 <=> col2 FROM myTable
<=>
is the NULL-safe equal operator. a <=> b
is same as writing:
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 sorry, I could not find one good reason to use this operator instead of AND/OR IS (NOT) NULL
. Your example for example, WHERE p.name <=> NULL
is same as WHERE p.name IS NULL
.
From the MySQL documentation:
NULL-safe equal. This operator performs an equality comparison like the = operator, but returns 1 rather than NULL if both operands are NULL, and 0 rather than NULL if one operand is NULL.
An example using the <=>
operator would be:
SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
Which would return:
1, 1, 0
An example of the regular =
operator would be:
SELECT 1 = 1, NULL = NULL, 1 = NULL;
Which would return:
1, NULL, NULL
The <=>
operator is very similar to the =
operator, except <=>
will never return NULL
It is the NULL - Safe Equal to operator. Check description.
mysql> SELECT * FROM t JOIN t2 WHERE t2.ids = t.ids;
+----+------+----+------+
| id | ids | id | ids |
+----+------+----+------+
| 1 | 1 | 1 | 1 |
| 2 | 2 | 2 | 2 |
| 5 | 6 | 5 | 6 |
| 6 | 7 | 6 | 7 |
+----+------+----+------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM t JOIN t2 WHERE t2.ids <=> t.ids;
+----+------+----+------+
| id | ids | id | ids |
+----+------+----+------+
| 1 | 1 | 1 | 1 |
| 2 | 2 | 2 | 2 |
| 3 | NULL | 3 | NULL |
| 4 | NULL | 3 | NULL |
| 3 | NULL | 4 | NULL |
| 4 | NULL | 4 | NULL |
| 5 | 6 | 5 | 6 |
| 6 | 7 | 6 | 7 |
참고URL : https://stackoverflow.com/questions/21927117/what-is-this-operator-in-mysql
'development' 카테고리의 다른 글
mysql에서 하나의 셀 데이터 변경 (0) | 2020.06.11 |
---|---|
Java에서 문자를 ASCII 숫자 값으로 변환 (0) | 2020.06.11 |
CodeIgniter activerecord, 마지막 삽입 ID를 검색 하시겠습니까? (0) | 2020.06.11 |
Docker-compose : npm 설치가 성공한 후 볼륨에 node_modules가 없습니다. (0) | 2020.06.11 |
NSString이 다른 특정 문자열로 시작하는지 확인하는 방법은 무엇입니까? (0) | 2020.06.11 |