Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Co to jest ten operator <=> w MySQL?

TL;DR

Jest to NULL bezpieczne równe operatora.

Jak zwykły = operatora, porównywane są dwie wartości i wynikiem jest albo 0 (nie równe) lub 1 (równy); innymi słowy:'a' <=> 'b' daje 0 i 'a' <=> 'a' daje 1 .

W przeciwieństwie do zwykłego = operator, wartości NULL nie mają specjalnego znaczenia, więc nigdy nie zwracają NULL jako możliwy wynik; więc:'a' <=> NULL daje 0 i NULL <=> NULL daje 1 .

Przydatność

Może się to przydać, gdy oba operandy mogą zawierać NULL i potrzebujesz spójnego wyniku porównania między dwiema kolumnami.

Innym przypadkiem użycia są przygotowane instrukcje, na przykład:

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

Tutaj symbol zastępczy może być wartością skalarną lub NULL bez konieczności zmiany czegokolwiek w zapytaniu.

Powiązani operatorzy

Poza <=> istnieją również dwa inne operatory, których można użyć do porównania z NULL , czyli IS NULL i IS NOT NULL; są częścią standardu ANSI i dlatego są obsługiwane w innych bazach danych, w przeciwieństwie do <=> , który jest specyficzny dla MySQL.

Możesz myśleć o nich jako o specjalizacjach <=> MySQL :

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

Na tej podstawie Twoje zapytanie (fragment) może zostać przekonwertowane na bardziej przenośne:

WHERE p.name IS NULL

Wsparcie

Standard SQL:2003 wprowadził dla tego predykat, który działa dokładnie tak, jak <=> MySQL operatora, w postaci:

IS [NOT] DISTINCT FROM 

Następujące informacje są powszechnie obsługiwane, ale są stosunkowo złożone:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zainicjować bazę danych MySQL ze schematem w kontenerze Docker?

  2. Jak naprawić podwójnie zakodowane znaki UTF8 (w tabeli utf-8)

  3. Web2py – migracja z SQLite do MySQL

  4. Jak usunąć wiodące i końcowe znaki w MySQL?

  5. mysqli_stmt::bind_result():Liczba zmiennych wiązania nie odpowiada liczbie pól w przygotowanej instrukcji