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оператор