복붙노트

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

SQL

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

나는 이전 개발자가 그것이라는 쿼리에서 작성된 코드에서 일하고 있어요

WHERE p.name <=> NULL

이 쿼리에 무엇을 의미 <=>합니까? 그것은 = 동일 뭔가? 아니면 구문 오류인가?

그러나 오류 또는 예외를 표시하지 않습니다. 이미 <알고> =! = MySQL을한다.

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    8.그것은 NULL입니다 - 안전 평등 연산자. 설명을 확인합니다.

    그것은 NULL입니다 - 안전 평등 연산자. 설명을 확인합니다.

  9. ==============================

    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 |
    
  10. from https://stackoverflow.com/questions/21927117/what-is-this-operator-in-mysql by cc-by-sa and MIT license