Rumah >pangkalan data >tutorial mysql >Mengapa Nilai NULL Menyebabkan Keputusan Tidak Dijangka dengan SQL's NOT IN Klausa?

Mengapa Nilai NULL Menyebabkan Keputusan Tidak Dijangka dengan SQL's NOT IN Klausa?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-23 12:31:09899semak imbas

Why Do NULL Values Cause Unexpected Results with SQL's NOT IN Clause?

Memahami Gelagat Tidak Dijangka Nilai NULL dan Klausa NOT IN dalam SQL

Pertanyaan SQL selalunya menghasilkan hasil yang mengejutkan apabila nilai NULL berinteraksi dengan pengendali NOT IN. Percanggahan ini menjadi jelas apabila membandingkan pertanyaan NOT IN dengan pertanyaan setara menggunakan LEFT JOIN.

Pertimbangkan pertanyaan ini:

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

Pertanyaan A mengembalikan hasil, manakala Pertanyaan B tidak. Punca utama terletak pada cara pangkalan data SQL yang berbeza mengendalikan nilai NULL.

Dengan ANSI_NULLS didayakan (lalai dalam banyak sistem seperti SQL Server 2005), sebarang perbandingan yang melibatkan NULL, seperti 3 = NULL, dinilai kepada UNKNOWN. Ketidakpastian ini berpunca daripada ketidakpastian yang wujud NULL.

Dalam Pertanyaan B, pengendali NOT IN menemui NULL dalam subkueri, menghasilkan penilaian UNKNOWN. Oleh kerana tiada nilai lain sepadan, keseluruhan predikat menjadi UNKNOWN, menghasilkan set hasil kosong.

Sebaliknya, melumpuhkan ANSI_NULLS mengubah tingkah laku. Dengan ANSI_NULLS dimatikan, 3 = NULL menilai kepada TRUE. SQL mentafsirkan NULL sebagai berpotensi sama dengan segala-galanya, termasuk dirinya sendiri. Akibatnya, predikat Pertanyaan B menilai kepada TRUE, mengembalikan hasil.

Ringkasnya, hasil yang tidak konsisten berpunca daripada perlakuan yang berbeza-beza bagi nilai NULL yang ditentukan oleh tetapan ANSI_NULLS. Apabila ANSI_NULLS dihidupkan, perbandingan dengan NULL menghasilkan UNKNOWN, membawa kepada hasil yang tidak dijangka dalam pertanyaan yang menggunakan nilai NOT IN dan NULL. Ini menyerlahkan kepentingan memahami NULL pengendalian dalam SQL untuk hasil pertanyaan yang tepat.

Atas ialah kandungan terperinci Mengapa Nilai NULL Menyebabkan Keputusan Tidak Dijangka dengan SQL's NOT IN Klausa?. 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