SQL's != Operator dan NULL Conundrum
PengendaliSQL !=
(tidak sama) memberikan cabaran unik apabila berurusan dengan nilai NULL
. Walaupun ia membandingkan nilai bukan NULL secara berkesan, kelakuannya dengan NULL
adalah berlawanan dengan intuitif.
Masalah dengan != NULL
Pertimbangkan ini:
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn != NULL; -- Returns 0 rows SELECT * FROM MyTable WHERE MyColumn NULL; -- Also returns 0 rows</code>
Pertanyaan ini, bertujuan untuk mencari baris dengan MyColumn
bukan NULL
, secara mengejutkan mengembalikan set hasil kosong. Ini bukan pepijat; ia disebabkan oleh sifat NULL
. NULL
tidak mewakili nilai; ia mewakili ketiadaan sesuatu nilai. Oleh itu, membandingkan nilai dengan NULL
menggunakan !=
atau =
sentiasa menghasilkan UNKNOWN
, bukan TRUE
atau FALSE
.
Penyelesaian: IS NOT NULL
Untuk mengenal pasti nilai bukan NULL dengan tepat, gunakan predikat IS NOT NULL
:
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn IS NOT NULL; -- Returns the expected rows</code>
IS NOT NULL
(dan rakan sejawatannya, IS NULL
) direka khusus untuk mengendalikan nilai NULL
dalam perbandingan SQL.
Membandingkan dengan Nilai Bukan NULL
Pengendali !=
berfungsi seperti yang diharapkan apabila membandingkan dengan nilai bukan NULL:
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn != 'ValueX'; -- Returns rows where MyColumn is not 'ValueX'</code>
Pengambilan Utama
Pertanyaan SQL tepat yang melibatkan nilai NULL
memerlukan penggunaan IS NOT NULL
dan IS NULL
. Elakkan menggunakan !=
atau =
untuk NULL
perbandingan untuk mengelakkan hasil yang tidak dijangka. Gunakan predikat khusus ini untuk pengendalian NULL
yang boleh dipercayai dalam pernyataan SQL anda.
Atas ialah kandungan terperinci Mengapa Adakah != Gagal Apabila Membandingkan dengan NULL dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!