SQL IN vs SQL EXISTS
Artikel ini membahas secara detail tentang IN dan operator EXISTS di SQL . Ini adalah pertanyaan umum di antara pengembang bahwa apa perbedaan antara kedua operator ini. Untuk mengetahui perbedaannya, mari kita bahas dulu masing-masing operator ini secara mendetail.
Operator DALAM
Operator IN digunakan untuk mendapatkan hasil ketika nilai tertentu cocok dengan nilai dalam kumpulan nilai atau dikembalikan oleh kueri dalam. Operator ini juga dapat digunakan dengan WHERE klausa untuk menentukan lebih dari satu nilai. Operator IN sering disebut sebagai akronim untuk operator OR karena operator ini mengurangi penggunaan beberapa kondisi OR dalam kueri SELECT, INSERT, UPDATE, atau DELETE .
Dalam operator ini, subquery diselesaikan terlebih dahulu dan hasilnya kemudian digunakan untuk menyelesaikan outer query.
Berikut ini adalah sintaks umum operator IN:
SELECT column_name FROM table_name WHERE column_name IN (value1, value2, …);
Contoh:
Mari kita perhatikan tabel Pelanggan berikut.
Cust_id | Nama_Pelanggan | Kota | Pekerjaan |
1 | Harry | Kolkata | Bisnis |
2 | Ron | Mumbai | Dokter |
3 | Albus | Delhi | Insinyur |
4 | Dobby | Pune | Ilmuwan |
5 | Jepret | Bangalore | Mahasiswa |
Kueri:
SELECT * FROM Customer WHERE Occupation IN ('Doctor', 'Scientist', 'Engineer');
Kueri di atas akan mengembalikan semua pelanggan yang merupakan Dokter atau Ilmuwan atau Insinyur.
Keluaran:
Cust_id | Nama_Pelanggan | Kota | Pekerjaan |
2 | Ron | Mumbai | Dokter |
3 | Albus | Delhi | Insinyur |
4 | Dobby | Pune | Ilmuwan |
Operator ADA
Operator EXISTS, tidak seperti operator IN, mengembalikan nilai Boolean. Operator ini memeriksa hasil kueri dalam dan mengembalikan nilai Boolean yaitu benar atau salah. Jika inner query mengembalikan satu atau beberapa record, maka operator akan mengembalikan true jika tidak maka akan mengembalikan false ketika tidak ada record yang ditemukan.
Operator ini juga efisien karena menghentikan pemrosesan lebih lanjut segera setelah peristiwa pertama yang sebenarnya terdeteksi.
Berikut ini adalah sintaks dari operator EXISTS:
SELECT column_names FROM table_name WHERE NOT EXISTS ( SELECT column_names FROM table_name WHERE condition );
Contoh:
Mari kita perhatikan tabel Pelanggan berikut.
Cust_id | Nama | Pekerjaan | Usia |
101 | Harry | Insinyur | 32 |
102 | Ron | Pengembang | 30 |
103 | Dobby | Pemimpin | 28 |
104 | Albus | Ilmuwan | 45 |
105 | Jepret | tukang kayu | 26 |
106 | Jahe | Aktor | 25 |
107 | NULL | NULL | NULL |
Mari kita pertimbangkan Pesanan meja lain.
Order_id | Cust_id | Nama_Produk | Tanggal_Pesanan |
1 | 101 | Laptop | 2010-01-10 |
2 | 103 | Desktop | 2012-02-12 |
3 | 106 | IPhone | 2015-02-15 |
4 | 104 | Seluler | 02-03-05 |
5 | 102 | TV | 20-03-20 |
Kueri:
SELECT Name, Occupation FROM Customer WHERE EXISTS ( SELECT * FROM Orders WHERE Customer.Cust_id = Orders.Cust_id );
Kueri di atas akan mengembalikan nama dan pekerjaan semua pelanggan yang telah melakukan setidaknya satu pesanan.
Keluaran:
Nama | Pekerjaan |
Harry | Insinyur |
Ron | Pengembang |
Dobby | Pemimpin |
Albus | Ilmuwan |
Jahe | Aktor |
Tabel perbedaan antara operator IN dan EXISTS
Perbedaan utama antara operator IN dan operator EXISTS tercantum di bawah ini dalam bentuk tabel:
Operator IN | Operator ADA |
Ini meminimalkan penggunaan kondisi ATAU. | Ini memeriksa keberadaan catatan dalam kueri dalam. |
Ini membandingkan nilai kueri dalam dengan nilai kueri luar. | Itu tidak membandingkan nilai antara kueri dalam dan subkueri. |
Ini memeriksa semua nilai di dalam blok klausa IN. | Ini menghentikan eksekusi lebih lanjut segera setelah kondisi benar pertama terpenuhi. |
Ini dapat mengembalikan TRUE, FALSE, atau NULL. | Ini mengembalikan TRUE atau FALSE. |
Dapat digunakan untuk memeriksa nilai NULL. | Ini tidak dapat digunakan untuk memeriksa nilai NULL. |
Ini digunakan dengan subkueri dan nilai. | Ini hanya digunakan dengan subkueri. |
Eksekusi lebih cepat jika hasil inner query lebih sedikit. | Eksekusi lebih cepat meskipun hasil kueri dalam besar. Ini lebih efisien daripada operator IN. |
Sintaks :SELECT column_names FROM table_name WHERE column_name IN (subquery); | Sintaks :SELECT column_namesFROM table_nameWHERE [TIDAK] ADA (subquery); |
Kesimpulan:
Dalam topik ini, perbandingan telah dibuat antara operator IN dan operator EXISTS dari SQL. Kedua operator melakukan operasi yang sama tetapi kerja internal mereka berbeda. Mereka memiliki kerja logis yang berbeda. Salah satu dari mereka dapat dipilih sesuai dengan kebutuhan. Namun, jika kumpulan datanya besar, selalu disarankan untuk menggunakan operator EXISTS.