Perbandingan nilai NULL dalam MySQL
Dalam MySQL, membandingkan lajur yang mengandungi nilai NULL boleh memberikan cabaran kerana tingkah laku berbeza daripada perbandingan kesamaan standard. Artikel ini meneroka sebab pertanyaan seperti "SELECT * from TABLE where CODE!='C'" mengecualikan baris dengan CODE=NULL, walaupun 'C' bukan NULL.
NULL tingkah laku perbandingan
Apabila membandingkan lajur dengan nilai bukan NULL (seperti "CODE!='C'"), pertanyaan mengembalikan baris yang CODE sepadan dengan 'C' dan mengecualikan semua nilai lain, termasuk NULL. Tingkah laku ini terhasil daripada SQL yang menganggap NULL sebagai nilai unik yang tidak mengambil bahagian dalam perbandingan standard.
Untuk memasukkan nilai NULL dalam perbandingan, ia mesti disemak secara eksplisit menggunakan operator IS NULL atau IS NOT NULL. Sebagai contoh, pertanyaan berikut akan mengembalikan semua baris di mana KOD adalah NULL atau tidak sama dengan 'C':
<code class="language-sql">SELECT * from TABLE where CODE IS NULL OR CODE!='C'</code>
Penjelasan tentang tingkah laku KOD!='C'
Sebab "CODE!='C'" tidak mengembalikan baris dengan CODE=NULL ialah pertanyaan akan dinilai palsu untuk sebarang perbandingan yang melibatkan NULL. Walaupun 'C' bukan NULL, membandingkannya dengan nilai NULL akan sentiasa menghasilkan palsu.
Pengendali perbandingan alternatif
MySQL menyediakan operator perbandingan alternatif "<=" (kurang daripada atau sama dengan) yang boleh digunakan untuk membandingkan nilai yang mengandungi NULL. Penilaian "x <= y" mengembalikan benar jika x kurang daripada, sama dengan, atau NULL, palsu sebaliknya.
Anda boleh mengembalikan semua baris di mana KOD adalah NULL atau tidak sama dengan 'C' dengan menggunakan "CODE <= 'C' OR CODE IS NULL" dan bukannya "CODE!='C'".
Atas ialah kandungan terperinci Mengapa 'CODE!='C'' Tidak Termasuk Nilai NULL dalam Pertanyaan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!