Estoy trabajando en el código escrito por un desarrollador anterior y en una consulta dice:
WHERE p.name <=> NULL¿Qué <=>significa en esta consulta? ¿Es algo igual a =? ¿O es un error de sintaxis?
Pero no muestra ningún error o excepción. Ya sé que <>= !=en MySQL .
                    
                        mysql
                                sql
                                operators
                                spaceship-operator
                                
                    
                    
                        zzlalani
fuente
                
                fuente

spaceshipoperadorRespuestas:
TL; DR
Es el operador
NULLseguro igual .Al igual que el
=operador regular , se comparan dos valores y el resultado es0(no igual) o1(igual); en otras palabras:'a' <=> 'b'rendimientos0y'a' <=> 'a'rendimientos1.A diferencia del
=operador regular , los valores deNULLno tienen un significado especial y, por lo tanto, nunca danNULLcomo resultado posible; entonces:'a' <=> NULLrendimientos0yNULL <=> NULLrendimientos1.Utilidad
Esto puede ser útil cuando ambos operandos pueden contener
NULLy necesita un resultado de comparación consistente entre dos columnas.Otro caso de uso es con declaraciones preparadas, por ejemplo:
Aquí, el marcador de posición puede ser un valor escalar o
NULLsin tener que cambiar nada sobre la consulta.Operadores relacionados
Además,
<=>también hay otros dos operadores que se pueden usar para compararNULL, a saber,IS NULLyIS NOT NULL; son parte del estándar ANSI y, por lo tanto, son compatibles con otras bases de datos, a diferencia de<=>MySQL.Puede pensar en ellos como especializaciones de MySQL
<=>:En base a esto, su consulta particular (fragmento) se puede convertir a la más portátil:
Apoyo
El estándar SQL: 2003 introdujo un predicado para esto, que funciona exactamente como el
<=>operador de MySQL , en la siguiente forma:Lo siguiente es universalmente compatible, pero es relativamente complejo:
fuente
<=>es algo un operador inútil? ¿Derecha?<=>toma dos operandos mientras queIS (NOT) NULLsolo toma uno; gran diferencia ... es tan útil como=en sí mismo a ese respecto.IS NULLyIS NOT NULLestán en el estándar SQL.<=>es una extensión específica de MySQL.is not distinct fromoperador. Curioso por saber si MySQL puede usar un índice en eso ...a <=> besNOT(a <=> b).es <=>
NULL-safe equal to operatorEste operador realiza una comparación de igualdad como el operador =, pero devuelve 1 en lugar de NULL si ambos operandos son NULL y 0 en lugar de NULL si un operando es NULL.
Ver aquí para la documentación
Muestra:
debe usar IS NOT NULL. (Los operadores de comparación = y <> ambos dan DESCONOCIDO con NULL a cada lado de la expresión).
También puede negar el operador de igualdad segura nula, pero esto no es SQL estándar.
fuente
<=>debe llamarse operador igual y=es elNULLoperador igual inseguro.Es el operador NULL-safe igual a
<=> El operador se utiliza para comparar valores NULL con los campos. Si es normal = (igual) Los operadores devuelven NULL si uno de los valores de comparación es NULL. Con <=> el operador devuelve verdadero o falso. <=> El operador es el mismo que IS NULL.
Del manual: -
Editar: - ( Aunque es muy tarde para agregar una nota lateral importante mencionando NO <=> también )
En otros comentarios:-
NO <=>
Hay un punto más NO <=> que se utiliza para comparar valores NULL con los campos. Si es normal! = O <> (no es igual) Los operadores devuelven NULL si uno de los valores de comparación es NULL. Con NO aplicado a <=> el operador devuelve verdadero o falso. NO se aplica a <=> El operador es igual que NO ES NULO.
Ejemplo:-
fuente
NOT <=>no es un operador, seNOTaplica al resultado deop1 <=> op2.<!=>operador<=>es el operador "igual a" nulo seguro de MySQL. Del manual :fuente
NULL-safe igual. Este operador realiza una comparación de igualdad como el operador =, pero devuelve 1 en lugar de NULL si ambos operandos son NULL y 0 en lugar de NULL si un operando es NULL.
Significa:
Cuando compara un valor NULL con un valor no NULL, obtendrá NULL. Si desea verificar si un valor es nulo.
El operador de igualdad (<=>) que considera NULL como un valor normal, por lo que devuelve 1 (no NULL) si ambos valores son NULL y devuelve 0 (no NULL) si uno de los valores es NULL:
p.ej
fuente
<=>es el operador igual a NULL-safe .a <=> bes lo mismo que escribir:Y lo siento, no pude encontrar una buena razón para usar este operador en lugar de
AND/OR IS (NOT) NULL. Su ejemplo, por ejemplo,WHERE p.name <=> NULLes el mismo queWHERE p.name IS NULL.fuente
De la documentación de MySQL :
Un ejemplo con el
<=>operador sería:Que volvería:
Un ejemplo del
=operador regular sería:Que volvería:
El
<=>operador es muy similar al=operador, excepto<=>que nunca volveráNULLfuente
Es el NULL: igual a seguro para el operador. Ver descripción .
fuente
fuente