sql >> Databasteknik >  >> RDS >> Mysql

Vad är den här operatorn <=> i MySQL?

TL;DR

Det är NULL säkert lika operatör.

Som den vanliga = operatorn jämförs två värden och resultatet är antingen 0 (inte lika) eller 1 (likvärdig); med andra ord:'a' <=> 'b' ger 0 och 'a' <=> 'a' ger 1 .

Till skillnad från den vanliga = operator, värden på NULL har ingen speciell betydelse och därför ger den aldrig NULL som ett möjligt resultat; så:'a' <=> NULL ger 0 och NULL <=> NULL ger 1 .

Användbarhet

Detta kan vara användbart när båda operanderna kan innehålla NULL och du behöver ett konsekvent jämförelseresultat mellan två kolumner.

Ett annat användningsfall är med förberedda uttalanden, till exempel:

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

Här kan platshållaren vara antingen ett skalärt värde eller NULL utan att behöva ändra något i frågan.

Relaterade operatörer

Förutom <=> det finns också två andra operatorer som kan användas för att jämföra med NULL , nämligen IS NULL och IS NOT NULL; de är en del av ANSI-standarden och stöds därför i andra databaser, till skillnad från <=> , som är MySQL-specifik.

Du kan se dem som specialiseringar av MySQL:s <=> :

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

Baserat på detta kan din specifika fråga (fragment) konverteras till den mer portabla:

WHERE p.name IS NULL

Support

SQL:2003-standarden introducerade ett predikat för detta, som fungerar precis som MySQL:s <=> operatör, i följande form:

IS [NOT] DISTINCT FROM 

Följande stöds universellt, men är relativt komplext:

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


  1. Hur man får poster från de senaste 30 dagarna

  2. Vad är en anpassad körtidsbild i Java 9?

  3. Returnera parametrarna för en lagrad procedur eller användardefinierad funktion i SQL Server (T-SQL-exempel)

  4. Returnera en resultatuppsättning