[SQL] MySQL의에서이 연산자는 <=> 무엇입니까?
SQLMySQL의에서이 연산자는 <=> 무엇입니까?
나는 이전 개발자가 그것이라는 쿼리에서 작성된 코드에서 일하고 있어요
WHERE p.name <=> NULL
이 쿼리에 무엇을 의미 <=>합니까? 그것은 = 동일 뭔가? 아니면 구문 오류인가?
그러나 오류 또는 예외를 표시하지 않습니다. 이미 <알고> =! = MySQL을한다.
해결법
-
==============================
1.그것은 NULL 안전 동등 연산자입니다.
그것은 NULL 안전 동등 연산자입니다.
일반 = 연산자 같이 두 값을 비교하고 그 결과 어느 0 (같지 않음) 또는 1 (같음)이고; 다른 말로 : 'A'<=> 'B'수율 0 'A'<=> 'A'수율 1.
그것은 결코 가능한 결과로 NULL을 산출하지 않도록 정기적 = 연산자와 달리, NULL의 값은 특별한 의미를 가지고하지 않습니다; 그래서 : 'A'<=> NULL 수익률 0과 NULL <=> NULL 수익률 1.
두 피연산자가 NULL을 포함 할 수 있습니다 때 유용 올 수 있으며, 두 열 사이의 일관성있는 비교 결과가 필요합니다.
또 다른 사용 케이스는 예를 들어 준비된 문, 함께 :
... WHERE col_a <=> ? ...
여기서 자리 쿼리에 대한 변경 아무것도하지 않고 스칼라 값 또는 NULL 중 하나가 될 수 있습니다.
<=> 외에 즉 NULL이며 NULL이 아닌, 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
-
==============================
2.연산자이다 <=> NULL 안전한 동등
연산자이다 <=> NULL 안전한 동등
하나의 피연산자가 NULL 인 경우 운전자 동등 비교 = 연산자 등을 수행하지만, 반환 1보다는 NULL은 두 피연산자가 NULL, 0이 아닌 경우에 NULL이다.
문서 여기를 참조하십시오
샘플 :
당신은 IS NOT NULL을 사용해야합니다. (비교 연산자 =와 <> 식의 양쪽 NULL 함께주고 UNKNOWN 모두).
SELECT * FROM table WHERE YourColumn IS NOT NULL;
또한 널 안전 항등 연산자를 부정하지만,이 표준 SQL입니다 수 없습니다.
SELECT * FROM table WHERE NOT (YourColumn <=> NULL);
-
==============================
3.이는 NULL 안전 연산자 같다
이는 NULL 안전 연산자 같다
<=> 연산자는 필드에 NULL 값을 비교하는 데 사용됩니다. 정상 =가 (동일) 연산자 NULL을 반환하면 비교 값 중 하나가 NULL 인 경우. 와 <=> 운영자 반환 참 또는 거짓. <=> 운영자는 IS NULL 동일하다.
매뉴얼에서 : -
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. 참 또는 거짓 <=> 운영자 반환에 적용되지 함께. <=> 조작에 적용되지는 IS NULL NOT에 동일하다.
예:-
SELECT NULL != NULL, //--Result is NULL NOT NULL <=> NULL, //--Result is 0 NULL IS NOT NULL; //--Result is 0
-
==============================
4.<=>은 MySQL을의 널 (null) 안전 연산자 "같음"입니다. 수동에서 :
<=>은 MySQL을의 널 (null) 안전 연산자 "같음"입니다. 수동에서 :
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL; -> 1, 1, 0 mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL; -> 1, NULL, NULL
-
==============================
5.NULL 안전과 동일. 하나의 피연산자가 NULL 인 경우 운전자 동등 비교 = 연산자 등을 수행하지만, 반환 1보다는 NULL은 두 피연산자가 NULL, 0이 아닌 경우에 NULL이다.
NULL 안전과 동일. 하나의 피연산자가 NULL 인 경우 운전자 동등 비교 = 연산자 등을 수행하지만, 반환 1보다는 NULL은 두 피연산자가 NULL, 0이 아닌 경우에 NULL이다.
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을 얻을 수 있습니다. 당신은 값이 null이 있는지 확인하십시오.
두 값은 NULL 복귀 0 (하지 NULL) 값 중 하나가 NULL 인 경우, 인 경우는 1 (되지 NULL)를 반환하며,이 정상 값으로 간주 NULL 항등 연산자 (<=>)
예를 들어,
SELECT NULL <=> NULL -- 1 SELECT TRUE <=> TRUE -- 1 SELECT col1 <=> col2 FROM myTable
-
==============================
6.<=>는 NULL 안전한 동등 연산자이다. <=> B는 기록과 동일하다 :
<=>는 NULL 안전한 동등 연산자이다. <=> 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
그리고 미안 해요, 내가 대신 및 / 또는 IS (NOT) NULL의이 연산자를 사용하는 하나의 좋은 이유를 찾을 수 없습니다. p.name <=> NULL이 p.name가 NULL WHERE 동일하다 예 대한 예.
-
==============================
7.MySQL의 문서에서 :
MySQL의 문서에서 :
<=> 연산자를 사용하는 예는 다음과 같습니다
SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
어느 반환합니다 :
1, 1, 0
일반 = 연산자의 일례가 될 것이다 :
SELECT 1 = 1, NULL = NULL, 1 = NULL;
어느 반환합니다 :
1, NULL, NULL
<=>는 NULL을 반환하지 않습니다 제외 <=> 연산자는 = 연산자와 매우 유사하다
-
==============================
8.그것은 NULL입니다 - 안전 평등 연산자. 설명을 확인합니다.
그것은 NULL입니다 - 안전 평등 연산자. 설명을 확인합니다.
-
==============================
9.
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 |
from https://stackoverflow.com/questions/21927117/what-is-this-operator-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 MySQL의에서 선택에서 삭제? (0) | 2020.04.23 |
---|---|
[SQL] 나는 오라클 SQL에서 BLOB에서 텍스트 내용을 얻는 방법 (0) | 2020.04.23 |
[SQL] 안드로이드 SQLite는 : UPDATE 문 (0) | 2020.04.23 |
[SQL] 어떻게 Oracle 데이터베이스에 허용되는 최대 연결 수를 확인하려면? (0) | 2020.04.23 |
[SQL] ALTER 테이블은 복합 기본 키를 추가하는 (0) | 2020.04.23 |