Dalam SQL, klausa EXISTS dan IN mempunyai tujuan yang berbeza dan akan menjejaskan kecekapan dan ketepatan pertanyaan. Mari kita lihat dengan lebih dekat perbezaan mereka untuk membimbing penggunaannya yang betul.
EXISTS ialah ungkapan Boolean yang mengembalikan TRUE jika terdapat sebarang baris dalam pertanyaan utama yang memenuhi syarat subkueri. Yang penting, EXISTS tidak mendapatkan semula baris sebenar, yang menjadikannya amat berkesan dalam menentukan sama ada padanan wujud.
Sebaliknya, klausa IN menggunakan subkueri untuk membandingkan secara langsung nilai medan dalam pertanyaan utama kepada senarai atau jadual. Oleh itu, IN melakukan perbandingan langsung, mendapatkan semula baris yang sepadan dengan nilai yang ditentukan.
EXISTS berguna dalam situasi berikut:
IN adalah lebih baik dalam situasi berikut:
Secara sejarah, penyataan IN menggunakan perbandingan jadual menghasilkan rancangan pertanyaan suboptimum disebabkan oleh operasi gabungan bersarang. Walau bagaimanapun, pengoptimum pertanyaan moden sebahagian besarnya telah mengurangkan masalah ini, membolehkan kedua-dua pertanyaan EXISTS dan IN dilaksanakan dengan cekap.
Pertimbangkan pertanyaan berikut:
<code class="language-sql">SELECT * FROM [table] WHERE [field] IN (SELECT [field] FROM [other_table])</code>
Di sini, IN membandingkan secara langsung nilai lajur [medan] dalam [jadual] dengan nilai dalam subkueri.
Sebagai alternatif, pertanyaan berikut menggunakan EXISTS untuk menyemak sama ada baris yang sepadan wujud:
<code class="language-sql">SELECT * FROM [table] WHERE EXISTS (SELECT * FROM [other_table] WHERE [other_field] = [field])</code>
Dalam contoh ini, EXISTS mengesahkan bahawa terdapat baris dalam [other_table] di mana nilai [other_field] sepadan dengan nilai [field], tetapi tidak mendapatkan semula baris sebenar.
Atas ialah kandungan terperinci EXISTS vs. IN dalam SQL: Bilakah Saya Harus Menggunakan Setiap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!