sql >> Database teknologi >  >> RDS >> Mysql

Hvad er denne operator <=> i MySQL?

TL;DR

Det er NULL sikker lige operatør.

Ligesom den almindelige = operatør, sammenlignes to værdier, og resultatet er enten 0 (ikke lig) eller 1 (lige); med andre ord:'a' <=> 'b' giver 0 og 'a' <=> 'a' giver 1 .

I modsætning til den almindelige = operator, værdier af NULL har ikke en speciel betydning, og derfor giver det aldrig NULL som et muligt resultat; så:'a' <=> NULL giver 0 og NULL <=> NULL giver 1 .

Anvendelighed

Dette kan være nyttigt, når begge operander kan indeholde NULL og du har brug for et ensartet sammenligningsresultat mellem to kolonner.

En anden use-case er med forberedte udsagn, for eksempel:

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

Her kan pladsholderen enten være en skalær værdi eller NULL uden at skulle ændre noget ved forespørgslen.

Relaterede operatører

Udover <=> der er også to andre operatorer, der kan bruges til at sammenligne med NULL , nemlig IS NULL og IS NOT NULL; de er en del af ANSI-standarden og understøttes derfor på andre databaser, i modsætning til <=> , som er MySQL-specifik.

Du kan tænke på dem som specialiseringer af MySQL's <=> :

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

Baseret på dette kan din specifikke forespørgsel (fragment) konverteres til den mere bærbare:

WHERE p.name IS NULL

Support

SQL:2003-standarden introducerede et prædikat for dette, som fungerer nøjagtigt som MySQL's <=> operatør, i følgende form:

IS [NOT] DISTINCT FROM 

Følgende er universelt understøttet, men er relativt komplekst:

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


  1. Hvordan installerer man ruby-oci8?

  2. hvordan man konverterer en strengdato til datoformat i oracle10g

  3. Hvad er forskellen mellem MySQL, MySQLi og PDO?

  4. Udvikling af fejltolerance i PostgreSQL