Perbezaan antara EXISTS dan operator IN dalam SQL

Pengarang: Peter Berry
Tarikh Penciptaan: 12 Ogos 2021
Tarikh Kemas Kini: 17 November 2024
Anonim
SUBQUERY dalam SQL [ penjelasan dan praktik SQL ]
Video.: SUBQUERY dalam SQL [ penjelasan dan praktik SQL ]

Kandungan

Cabaran yang berterusan dalam menggunakan SQL ialah menentukan penggunaan yang betul dari operator EXISTS dan IN. Kedua-dua operator boleh menghasilkan keputusan yang sama, tetapi tidak selalu. Di samping itu, ada perdebatan mengenai bagaimana setiap operator dioptimumkan untuk kelajuan. Pengguna harus memahami sifat-sifat yang berbeza dari setiap pengendali dan percubaan dengan kedua untuk menentukan penggunaan yang sesuai.


Pertimbangkan matlamat SQL anda apabila memilih EXISTS atau IN (Jupiterimages / Photos.com / Getty Images)

IN operator

Operator IN mengembalikan satu baris jika nilai medan jadual memuaskan keadaan WHERE dalam senarai nilai IN. Ia biasanya digunakan sebagai sebahagian daripada pertanyaan utama atau bersamaan dengan subquery.

Contoh 1: WHERE table.field IN ('a', 'b', 'c') Contoh 2: WHERE table.field IN (Subquery that returns set)

Operator EXISTS

Operator EXIS mengembalikan semua baris utama jika subquery mengandungi sebarang baris. Ia hanya digunakan bersempena dengan subquery. Baris dikembalikan ditentukan oleh penapis dalam pertanyaan utama.

Contoh: WHERE EXISTS (Subquery yang mengembalikan satu set)

Perbezaan

Pengendali IN tidak dapat menilai nilai NULL, jadi garis semacam itu akan selalu palsu, dan tidak akan dikembalikan, tidak seperti operator EXISTS, yang menilai dan mengembalikan garis dengan nilai NULL.


Kesamaan

Kedua-dua EXISTS dan IN sokongan menyokong subqueries berkorelasi dan uncorrelated, dan kedua-duanya boleh menghasilkan hasil yang sama. Apabila berkorelasi, mereka memenuhi medan pertanyaan utama untuk medan subquery (misalnya: principal.id = subquery.id). Subquery menilai baris demi baris, untuk setiap kejadian yang dijumpai. Dalam kes ini, IN dan EXISTS akan mengembalikan baris yang sama berdasarkan syarat "id" yang sama. Apabila tidak dikecualikan, kedua pengendali memproses subqueries mereka dan kemudian menggabungkan keputusan untuk pertanyaan utama.

Prestasi

Prestasi ditentukan oleh pengoptimum pangkalan data dan pelan pelaksanaan yang digunakan untuk kod yang dilaksanakan. Untuk EXISTS dan IN, pengoptimuman boleh memilih laluan yang berlainan. Dalam Oracle, TIDAK ADA biasanya lebih cepat daripada TIDAK DI. Pada akhirnya, beberapa percubaan dan kesilapan diperlukan untuk menyusun laluan terpendek, bergantung pada pangkalan data dan versi yang digunakan. Pastikan anda menggunakan operator yang menjamin keputusan yang betul terlebih dahulu, dan kemudian cuba untuk menggantikan pengendali untuk melihat yang terpantas.