TL; DR
Це NULL
безпечний рівний оператор.
Як і у звичайного =
оператора, порівнюються два значення, і результат є 0
(не рівним) або 1
(рівним); іншими словами: 'a' <=> 'b'
врожайність 0
і 'a' <=> 'a'
врожайність 1
.
На відміну від звичайного =
оператора, значення NULL
не мають особливого значення, тому воно ніколи не дає NULL
можливого результату; так: 'a' <=> NULL
врожайність 0
і NULL <=> NULL
врожайність 1
.
Корисність
Це може бути корисним, коли обидва операнди можуть містити NULL
і вам потрібен послідовний результат порівняння між двома стовпцями.
Інший випадок використання - це підготовлені заяви, наприклад:
... WHERE col_a <=> ? ...
Тут заповнювач заповнення може бути скалярним значенням або NULL
без необхідності нічого змінювати запит.
Пов'язані оператори
Крім того <=>
, є також два інших оператори, які можна використовувати для порівняння NULL
, а саме IS NULL
і IS NOT NULL
; вони є частиною стандарту ANSI і тому підтримуються в інших базах даних, на відміну від <=>
, що є MySQL.
Ви можете вважати їх спеціалізаціями MySQL <=>
:
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
Виходячи з цього, ваш конкретний запит (фрагмент) можна перетворити на більш портативний:
WHERE p.name IS NULL
Підтримка
Стандарт SQL: 2003 для цього ввів предикат, який працює точно так само, як <=>
оператор MySQL , у такій формі:
IS [NOT] DISTINCT FROM
Нижче наведено загальну підтримку, але є відносно складною:
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1
spaceship
оператор