development

MySQL에서이 연산자 <=>는 무엇입니까?

big-blog 2020. 6. 11. 07:44
반응형

MySQL에서이 연산자 <=>는 무엇입니까?


이전 개발자가 작성한 코드를 작성 중이며 쿼리에서 다음과 같이 말합니다.

WHERE p.name <=> NULL

<=>이 쿼리에서 무엇을 의미합니까? 그것은 동등한 것 =입니까? 아니면 구문 오류입니까?

그러나 오류나 예외는 표시되지 않습니다. 나는 이미 MySQL 에서 <>= !=알고있다 .


=연산자 와의 유사성

정규 =연산자 와 같이 두 값이 비교되고 결과는 0(같지 않음) 또는 1(같음)입니다. 다른 말로 'a' <=> 'b'하면 yields 0and 'a' <=> 'a'yields 1입니다.

=연산자 와의 차이점

정규 =연산자 와 달리 값은 NULL특별한 의미가 없으므로 NULL가능한 결과를 얻지 못합니다 . 그래서 : 'a' <=> NULL수율 0NULL <=> NULL수율 1.

반대로 =, 이에 의해 'a' = NULL수율 NULL에도 NULL = NULL수율 NULL; BTW는 MySQL의 거의 모든 연산자와 함수가 이러한 방식으로 작동 NULL합니다. 비교 는 기본적으로 정의되어 있지 않기 때문 입니다.

유용성

이것은 두 피연산자 모두를 포함 할 수 있고 두 열간 NULL에 일관된 비교 결과가 필요한 경우에 매우 유용합니다 .

또 다른 유스 케이스는 다음과 같이 준비된 명령문입니다.

... WHERE col_a <=> ? ...

여기서 자리 표시자는 스칼라 값이거나 NULL쿼리에 대한 내용을 변경할 필요가 없습니다.

관련 연산자

게다가 <=>에 대해 비교하는 데 사용할 수있는 두 개의 다른 연산자도있다 NULL, 즉, IS NULLIS 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

반응형