TL;DR
Ini adalah NULL aman sama
operator.
Seperti = regular biasa operator, dua nilai dibandingkan dan hasilnya adalah 0 (tidak sama) atau 1 (setara); dengan kata lain:'a' <=> 'b' menghasilkan 0 dan 'a' <=> 'a' menghasilkan 1 .
Berbeda dengan = regular biasa operator, nilai NULL tidak memiliki arti khusus sehingga tidak pernah menghasilkan NULL sebagai hasil yang mungkin; jadi:'a' <=> NULL menghasilkan 0 dan NULL <=> NULL menghasilkan 1 .
Kegunaan
Ini bisa berguna ketika kedua operan mungkin berisi NULL dan Anda memerlukan 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 NULL tanpa harus mengubah apa pun tentang kueri.
Operator terkait
Selain <=> ada juga dua operator lain yang dapat digunakan untuk membandingkan NULL , yaitu IS NULL dan IS NOT NULL; mereka adalah bagian dari standar ANSI dan oleh karena itu 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 (fragmen) khusus Anda dapat dikonversi ke yang lebih portabel:
WHERE p.name IS NULL
Dukungan
Standar SQL:2003 memperkenalkan predikat untuk ini, yang bekerja persis seperti <=> . MySQL operator, 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