Rumah > Artikel > pangkalan data > IN vs EXISTS dalam SQL: Memahami Prestasi dan Penggunaan
Dalam MySQL, IN dan EXISTS digunakan dalam pertanyaan untuk menapis data berdasarkan kehadiran baris dalam subkueri. Walau bagaimanapun, ia berfungsi dengan cara yang berbeza dan memilih antara mereka boleh memberi kesan kepada prestasi pertanyaan. Mari kita pecahkan perbezaan mereka dengan penjelasan dan contoh praktikal.
Penerangan:
Klausa IN digunakan untuk menapis baris berdasarkan sama ada nilai lajur sepadan dengan mana-mana nilai dalam senarai atau subkueri. Ia menyemak nilai padanan daripada pertanyaan dalam dan membandingkannya dengan pertanyaan luar.
Prestasi:
Klausa IN biasanya cekap apabila subkueri mengembalikan sejumlah kecil rekod. Walau bagaimanapun, jika subkueri mengembalikan set data yang besar, IN boleh menjadi lebih perlahan.
Sintaks:
SELECT columns FROM table WHERE column IN (subquery);
Penerangan:
Klausa EXISTS menyemak kewujudan baris yang dikembalikan oleh subkueri. Jika subkueri mengembalikan sebarang baris, EXISTS menilai kepada TRUE dan pertanyaan luar diteruskan. Ia tidak mengambil berat tentang kandungan baris tetapi hanya sama ada baris itu wujud.
Prestasi:
EXISTS biasanya lebih pantas untuk set data yang besar kerana ia berhenti memproses sebaik sahaja ia menemui padanan. Ini menjadikannya cekap apabila bekerja dengan subkueri yang mengembalikan banyak baris.
Sintaks:
SELECT columns FROM table WHERE EXISTS (subquery);
Mari pertimbangkan dua jadual: pelanggan dan pesanan.
customer_id | customer_name |
---|---|
1 | John Doe |
2 | Jane Smith |
3 | Alice Brown |
order_id | customer_id | order_total |
---|---|---|
1 | 1 | 200 |
2 | 1 | 150 |
3 | 2 | 300 |
We want to find all customers who have placed at least one order.
SELECT customer_name FROM customers WHERE customer_id IN (SELECT customer_id FROM orders);
Explanation:
Result:
| customer_name |
|---------------|
| John Doe |
| Jane Smith |
SELECT customer_name FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);
Explanation:
Result:
| customer_name |
|---------------|
| John Doe |
| Jane Smith |
Return Values:
Efficiency:
Use Case:
Assume we have:
Query with IN:
SELECT customer_name FROM customers WHERE customer_id IN (SELECT customer_id FROM orders);
Query with EXISTS:
SELECT customer_name FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);
Atas ialah kandungan terperinci IN vs EXISTS dalam SQL: Memahami Prestasi dan Penggunaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!