TL; DR
Itu adalah operator yang NULLsetara dan aman .
Seperti =operator reguler , dua nilai dibandingkan dan hasilnya adalah 0(tidak sama) atau 1(sama); dengan kata lain: 'a' <=> 'b'hasil 0dan 'a' <=> 'a'hasil 1.
Tidak seperti =operator reguler , nilai-nilai NULLtidak memiliki arti khusus dan karenanya tidak pernah menghasilkan NULLsebagai hasil yang mungkin; jadi: 'a' <=> NULLhasil 0dan NULL <=> NULLhasil 1.
Kegunaan
Ini bisa berguna ketika kedua operan mungkin mengandung NULLdan Anda membutuhkan hasil perbandingan yang konsisten antara dua kolom.
Kasus penggunaan lain adalah dengan pernyataan yang disiapkan, misalnya:
... WHERE col_a <=> ? ...
Di sini, placeholder dapat berupa nilai skalar atau NULLtanpa harus mengubah apa pun tentang kueri.
Operator terkait
Selain itu <=>ada juga dua operator lain yang bisa digunakan untuk membandingkan NULL, yaitu IS NULLdan IS NOT NULL; mereka adalah bagian dari standar ANSI dan karenanya didukung pada database lain, tidak seperti <=>, yang khusus untuk MySQL.
Anda dapat menganggapnya sebagai spesialisasi MySQL <=>:
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
Berdasarkan ini, kueri khusus Anda (fragmen) dapat dikonversi ke yang lebih portabel:
WHERE p.name IS NULL
Dukung
Standar SQL: 2003 memperkenalkan predikat untuk ini, yang berfungsi persis seperti <=>operator MySQL , dalam bentuk berikut:
IS [NOT] DISTINCT FROM
Berikut ini didukung secara universal, tetapi relatif kompleks:
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1
spaceshipOperator