Saya sedang mengerjakan kode yang ditulis oleh pengembang sebelumnya dan dalam kueri tertulis,
WHERE p.name <=> NULL
Apa <=>
artinya dalam permintaan ini? Apakah itu setara dengan =
? Atau apakah itu kesalahan sintaksis?
Tetapi tidak menunjukkan kesalahan atau pengecualian. Saya sudah tahu itu <>
= !=
di MySQL .
mysql
sql
operators
spaceship-operator
zzlalani
sumber
sumber
spaceship
OperatorJawaban:
TL; DR
Itu adalah operator yang
NULL
setara dan aman .Seperti
=
operator reguler , dua nilai dibandingkan dan hasilnya adalah0
(tidak sama) atau1
(sama); dengan kata lain:'a' <=> 'b'
hasil0
dan'a' <=> 'a'
hasil1
.Tidak seperti
=
operator reguler , nilai-nilaiNULL
tidak memiliki arti khusus dan karenanya tidak pernah menghasilkanNULL
sebagai hasil yang mungkin; jadi:'a' <=> NULL
hasil0
danNULL <=> NULL
hasil1
.Kegunaan
Ini bisa berguna ketika kedua operan mungkin mengandung
NULL
dan Anda membutuhkan hasil perbandingan yang konsisten antara dua kolom.Kasus penggunaan lain adalah dengan pernyataan yang disiapkan, misalnya:
Di sini, placeholder dapat berupa nilai skalar atau
NULL
tanpa harus mengubah apa pun tentang kueri.Operator terkait
Selain itu
<=>
ada juga dua operator lain yang bisa digunakan untuk membandingkanNULL
, yaituIS NULL
danIS 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
<=>
:Berdasarkan ini, kueri khusus Anda (fragmen) dapat dikonversi ke yang lebih portabel:
Dukung
Standar SQL: 2003 memperkenalkan predikat untuk ini, yang berfungsi persis seperti
<=>
operator MySQL , dalam bentuk berikut:Berikut ini didukung secara universal, tetapi relatif kompleks:
sumber
<=>
agak operator yang tidak berguna? Baik?<=>
membutuhkan dua operan sedangkanIS (NOT) NULL
hanya membutuhkan satu; perbedaan besar ... itu sama berguna dengan=
dirinya sendiri dalam hal itu.IS NULL
danIS NOT NULL
berada dalam standar SQL.<=>
adalah ekstensi spesifik MySQL.is not distinct from
operator. Penasaran ingin tahu apakah MySQL dapat menggunakan indeks pada ...a <=> b
adalahNOT(a <=> b)
.adalah <=>
NULL-safe equal to operator
Operator ini melakukan perbandingan kesetaraan seperti operator =, tetapi mengembalikan 1 daripada NULL jika kedua operan NULL, dan 0 daripada NULL jika satu operan adalah NULL.
Lihat di sini untuk dokumentasi
Sampel :
Anda harus menggunakan IS NOT NULL. (Operator perbandingan = dan <> keduanya memberikan TIDAK DIKENALKAN dengan NULL di kedua sisi ekspresi.)
juga dapat meniadakan operator kesetaraan nol aman tetapi ini bukan SQL standar.
sumber
<=>
harus disebut Operator equals dan=
adalahNULL
operator yang sama dengan tidak aman.Ini adalah NULL-safe sama dengan operator
<=> Operator digunakan untuk membandingkan nilai NULL dengan bidang. Jika normal = (sama dengan) Operator mengembalikan NULL jika salah satu nilai perbandingannya NULL. Dengan <=> operator mengembalikan benar atau salah. <=> Operator sama dengan IS NULL.
Dari manual: -
Sunting: - ( Meskipun sangat terlambat untuk menambahkan satu catatan penting yang menyebutkan TIDAK <=> juga )
Di samping catatan: -
TIDAK <=>
Ada satu lagi poin BUKAN <=> yang digunakan untuk membandingkan nilai NULL dengan bidang. Jika normal! = Atau <> (tidak sama) Operator mengembalikan NULL jika salah satu nilai perbandingannya NULL. Dengan TIDAK diterapkan pada <=> operator mengembalikan benar atau salah. TIDAK diterapkan pada <=> Operator sama dengan IS NOT NULL.
Contoh:-
sumber
NOT <=>
bukan operator, iniNOT
diterapkan pada hasilop1 <=> op2
.<!=>
operator<=>
adalah operator "sama dengan" null-safe MySQL. Dari manual :sumber
NULL-safe sama. Operator ini melakukan perbandingan kesetaraan seperti operator =, tetapi mengembalikan 1 daripada NULL jika kedua operan NULL, dan 0 daripada NULL jika satu operan adalah NULL.
Itu penting:
Ketika Anda membandingkan nilai NULL dengan nilai non-NULL, Anda akan mendapatkan NULL. Jika Anda ingin memeriksa apakah suatu nilai nol.
Operator Kesetaraan (<=>) yang menganggap NULL sebagai nilai normal, sehingga mengembalikan 1 (bukan NULL) jika kedua nilai NULL dan mengembalikan 0 (bukan NULL) jika salah satu nilainya adalah NULL:
misalnya
sumber
<=>
adalah operator yang setara dengan NULL-safe .a <=> b
sama seperti menulis:Dan maaf, saya tidak dapat menemukan satu alasan bagus untuk menggunakan operator ini
AND/OR IS (NOT) NULL
. Contoh Anda misalnya,WHERE p.name <=> NULL
sama denganWHERE p.name IS NULL
.sumber
Dari dokumentasi MySQL :
Contoh menggunakan
<=>
operator adalah:Yang akan kembali:
Contoh
=
operator reguler adalah:Yang akan kembali:
The
<=>
operator adalah sangat mirip dengan=
operator, kecuali<=>
tidak akan pernah kembaliNULL
sumber
Ini adalah NULL - Aman Sama dengan operator. Periksa deskripsi .
sumber
sumber