Rumah >pangkalan data >tutorial mysql >Bagaimanakah Nilai NULL Mempengaruhi Keputusan NOT IN Klausa dalam SQL?

Bagaimanakah Nilai NULL Mempengaruhi Keputusan NOT IN Klausa dalam SQL?

Susan Sarandon
Susan Sarandonasal
2025-01-23 12:42:12535semak imbas

How Do NULL Values Affect the Results of NOT IN Clauses in SQL?

Memahami NULL dalam Klausa NOT IN SQL

Tingkah laku fasal NOT IN dalam SQL dipengaruhi dengan ketara oleh kehadiran nilai NULL. Perbezaan halus ini boleh membawa kepada hasil yang tidak dijangka jika tidak dipertimbangkan dengan teliti. Contoh berikut menggambarkan tingkah laku ini.

Contoh Pertanyaan 1:

<code class="language-sql">select 'true' where 3 in (1, 2, 3, null)</code>

Pertanyaan ini dinilai kepada:

<code>3 = 1 OR 3 = 2 OR 3 = 3 OR 3 = NULL</code>

Oleh kerana 3 = 3 adalah benar, pertanyaan itu mengembalikan hasil.

Contoh Pertanyaan 2:

<code class="language-sql">select 'true' where 3 not in (1, 2, null)</code>

Ini bersamaan dengan:

<code class="language-sql">3 <> 1 AND 3 <> 2 AND 3 <> NULL</code>

Dengan ANSI_NULLS didayakan (tetapan standard dalam kebanyakan pangkalan data SQL), 3 <> NULL menilai kepada UNKNOWN. Keadaan AND dengan UNKNOWN menghasilkan UNKNOWN dan UNKNOWN dianggap sebagai palsu dalam klausa WHERE. Akibatnya, pertanyaan ini tidak mengembalikan baris.

Melumpuhkan ANSI_NULLS mengubah tingkah laku ini. Tanpa ANSI_NULLS, 3 <> NULL mungkin bernilai benar, menyebabkan pertanyaan mengembalikan hasil. Ini menyerlahkan ketidakkonsistenan yang diperkenalkan oleh nilai NULL.

Kesimpulan:

Apabila menggunakan NOT IN, sentiasa ambil kira potensi NULL nilai dalam senarai. Kehadiran NULL memberi kesan ketara kepada hasil pertanyaan disebabkan oleh logik tiga nilai SQL (BENAR, SALAH, TIDAK DIKETAHUI). Adalah disyorkan untuk mengelakkan NOT IN dengan nilai NULL dan menggunakan pendekatan alternatif seperti NOT EXISTS untuk hasil yang lebih boleh diramal dan boleh dipercayai.

Atas ialah kandungan terperinci Bagaimanakah Nilai NULL Mempengaruhi Keputusan NOT IN Klausa dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn