Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membandingkan Nilai NULL dengan betul dalam Pertanyaan SQL?
Pemahaman mendalam tentang perbandingan nilai SQL NULL
Dalam SQL, nilai NULL mewakili nilai yang tidak diketahui atau kosong. Apabila membandingkan NULL dengan nilai lain menggunakan operator perbandingan biasa (cth. =, !=), hasilnya sentiasa NULL. Ini boleh menyebabkan tingkah laku yang tidak dijangka dalam hasil pertanyaan.
Perbezaan antara "di mana x adalah batal" dan "di mana x = batal"
Sintaks "di mana x adalah nol" secara eksplisit menyemak sama ada lajur x adalah NULL, manakala "di mana x = null" cuba membandingkan nilai lajur kepada literal NULL. Perbandingan terakhir gagal kerana ia menghasilkan NULL, yang sentiasa palsu dalam klausa WHERE.
Penjelasan tentang tingkah laku nilai NULL
SQL mentafsirkan NULL sebagai "tidak diketahui", yang bermaksud bahawa sebarang perbandingan dengan NULL akan menghasilkan keadaan yang tidak diketahui. Oleh itu, pengendali perbandingan biasa tidak dapat menguji nilai NULL dengan berkesan.
IS NULL dan BUKAN NULL sintaks
Untuk menyelesaikan masalah ini, SQL menyediakan sintaks "IS NULL" dan "IS NOT NULL". Syarat khas ini secara eksplisit menyemak kehadiran nilai NULL dalam lajur. "IS NULL" mengembalikan benar jika lajur adalah NULL, manakala "IS NOT NULL" mengembalikan true jika lajur bukan NULL.
Contoh
Pertanyaan SQL berikut menggambarkan perbezaan antara pengendali perbandingan biasa dan sintaks IS NULL:
<code class="language-sql">CREATE TABLE example (value INT); INSERT INTO example VALUES (1), (NULL); SELECT * FROM example WHERE value = NULL; -- 返回空结果 SELECT * FROM example WHERE value IS NULL; -- 返回包含NULL值的行</code>
Pertanyaan ini menunjukkan bahawa perbandingan biasa tidak mengembalikan baris yang mengandungi nilai NULL, manakala sintaks IS NULL mengenal pastinya dengan betul.
Atas ialah kandungan terperinci Bagaimana untuk Membandingkan Nilai NULL dengan betul dalam Pertanyaan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!