SQL adalah bahasa pemrograman yang digunakan untuk mengelola data dalam sistem manajemen basis data relasional (RDBMS). SQL memiliki banyak fitur dan fungsi yang berguna untuk melakukan berbagai operasi pada data, seperti memasukkan, memperbarui, menghapus, dan mengambil data.
Salah satu operasi yang sering dilakukan dalam SQL adalah mengecek apakah data tertentu sudah ada di tabel atau tidak. Hal ini berguna untuk mencegah duplikasi data, memvalidasi input, atau menentukan kondisi untuk query lain.
Ada beberapa cara untuk mengecek apakah data sudah ada di tabel, tetapi salah satu cara yang paling umum dan efisien adalah menggunakan klausa EXISTS. Klausa EXISTS adalah klausa kondisional yang mengembalikan nilai TRUE atau FALSE berdasarkan apakah subquery yang diberikan menghasilkan setidaknya satu baris atau tidak.

Dalam artikel ini, Bardimin akan membahas cara menggunakan klausa EXISTS dalam SQL, apa keuntungan dan kerugiannya, dan bagaimana membandingkannya dengan metode lain, seperti menggunakan COUNT atau JOIN. Bardimin juga akan memberikan beberapa contoh penggunaan EXISTS dalam berbagai skenario dan basis data, seperti MySQL.
Sintaks dan Contoh Dasar SQL EXISTS
Sintaks dasar untuk menggunakan klausa EXISTS dalam SQL adalah sebagai berikut:
SELECT column_name(s) FROM table_name WHERE EXISTS (subquery);
Di sini, subquery adalah query yang berada di dalam kurung dan biasanya mengacu pada tabel yang sama atau tabel lain yang terhubung dengan tabel utama. Subquery harus mengembalikan setidaknya satu kolom, tetapi nilai kolom tersebut tidak relevan karena EXISTS hanya peduli apakah ada baris yang dihasilkan atau tidak.
Mari kita lihat contoh sederhana penggunaan EXISTS dalam SQL. Misalkan kita memiliki tabel mahasiswa yang berisi data tentang mahasiswa di sebuah universitas, seperti berikut:
id | nama | jurusan | angkatan |
1 | Ali | Matematika | 2019 |
2 | Budi | Fisika | 2020 |
3 | Cici | Biologi | 2019 |
4 | Dedi | Kimia | 2020 |
5 | Eka | Matematika | 2021 |
Kita juga memiliki tabel nilai yang berisi data tentang nilai mahasiswa di berbagai mata kuliah, seperti berikut:
id_mahasiswa | kode_mk | nilai |
1 | MA101 | 80 |
1 | MA102 | 85 |
2 | FI101 | 75 |
2 | FI102 | 70 |
3 | BI101 | 90 |
4 | KI101 | 95 |
5 | MA101 | 60 |
Jika kita ingin menampilkan data mahasiswa yang memiliki nilai di tabel nilai, kita bisa menggunakan klausa EXISTS seperti berikut:
SELECT * FROM mahasiswa m WHERE EXISTS ( SELECT 1 FROM nilai n WHERE m.id = n.id_mahasiswa );
Hasil query di atas adalah sebagai berikut:
id | nama | jurusan | angkatan |
1 | Ali | Matematika | 2019 |
2 | Budi | Fisika | 2020 |
3 | Cici | Biologi | 2019 |
4 | Dedi | Kimia | 2020 |
5 | Eka | Matematika | 2021 |
Query di atas menggunakan subquery yang mengembalikan nilai 1 untuk setiap baris yang memenuhi kondisi m.id = n.id_mahasiswa, yang berarti mahasiswa tersebut memiliki nilai di tabel nilai. Karena subquery menghasilkan setidaknya satu baris untuk setiap mahasiswa, maka klausa EXISTS mengembalikan TRUE dan mahasiswa tersebut ditampilkan di hasil query.
Perhatikan bahwa kita bisa menggunakan nilai apa saja di dalam subquery, bahkan NULL atau *, karena nilai tersebut tidak berpengaruh pada hasil EXISTS. Namun, untuk alasan kinerja, disarankan untuk menggunakan nilai konstan yang paling sederhana, seperti 1, 0, atau NULL, karena SQL tidak perlu memproses nilai kolom yang sebenarnya.
Keuntungan dan Kerugian SQL EXISTS
Menggunakan klausa EXISTS dalam SQL memiliki beberapa keuntungan dan kerugian, tergantung pada situasi dan basis data yang digunakan. Berikut adalah beberapa keuntungan dan kerugian dari EXISTS:
Keuntungan
- EXISTS adalah cara yang intuitif dan mudah dibaca untuk mengecek apakah data sudah ada di tabel atau tidak, karena klausa tersebut secara eksplisit menyatakan maksud query.
- EXISTS adalah cara yang efisien untuk mengecek apakah data sudah ada di tabel atau tidak, karena SQL akan berhenti mencari setelah menemukan baris pertama yang memenuhi kondisi subquery, sehingga menghemat waktu dan sumber daya.
- EXISTS adalah cara yang fleksibel untuk mengecek apakah data sudah ada di tabel atau tidak, karena kita bisa menggunakan subquery yang kompleks dan melibatkan lebih dari satu tabel, asalkan subquery tersebut valid dan mengembalikan setidaknya satu kolom.