sql >> Databáze >  >> RDS >> Mysql

Co je tento operátor <=> v MySQL?

TL;DR

Je to NULL bezpečný rovný operátor.

Jako normální = operátorem, jsou porovnány dvě hodnoty a výsledkem je buď 0 (nerovná se) nebo 1 (rovnat se); jinými slovy:'a' <=> 'b' dává 0 a 'a' <=> 'a' dává 1 .

Na rozdíl od běžného = operátor, hodnoty NULL nemají zvláštní význam, a proto nikdy neposkytne NULL jako možný výsledek; takže:'a' <=> NULL dává 0 a NULL <=> NULL dává 1 .

Užitečnost

To může být užitečné, když oba operandy mohou obsahovat NULL a potřebujete konzistentní výsledek porovnání mezi dvěma sloupci.

Dalším případem použití jsou připravené příkazy, například:

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

Zde může být zástupným symbolem buď skalární hodnota, nebo NULL aniž byste museli na dotazu cokoliv měnit.

Související operátoři

Kromě <=> existují také dva další operátory, které lze použít k porovnání s NULL , konkrétně IS NULL a IS NOT NULL; jsou součástí standardu ANSI, a proto jsou na rozdíl od <=> podporovány v jiných databázích , který je specifický pro MySQL.

Můžete si je představit jako specializace <=> MySQL :

'a' IS NULL     ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)

Na základě toho může být váš konkrétní dotaz (fragment) převeden na přenosnější:

WHERE p.name IS NULL

Podpora

Standard SQL:2003 pro to zavedl predikát, který funguje přesně jako <=> MySQL operátora v následujícím tvaru:

IS [NOT] DISTINCT FROM 

Následující je všeobecně podporováno, ale je relativně složité:

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 1
     ELSE 0
END = 1


  1. Jak mít dynamické SQL v MySQL uložené procedury

  2. ClusterControl - Pokročilá správa zálohování - PostgreSQL

  3. Může být cizí klíč NULL a/nebo duplicitní?

  4. Historie databází