EXISTS di SQL

Mengecek apakah subquery menghasilkan minimal satu baris. Cocok untuk pertanyaan "yang punya ..." atau "yang belum pernah ...".

Penjelasan sederhana

EXISTS mengecek apakah sebuah subquery menemukan minimal satu baris. Jawabannya hanya ya atau tidak. Database tidak peduli isi barisnya, cukup tahu ada atau tidak.

Ini cocok untuk pertanyaan "siapa yang pernah..." atau, dengan NOT EXISTS, "siapa yang belum pernah...".

Sintaks

WHERE [NOT] EXISTS (
  SELECT 1 FROM tabel_lain
  WHERE tabel_lain.kunci = tabel.kunci
);
BagianKeterangan
EXISTSBenar jika subquery menemukan baris.
NOT EXISTSBenar jika subquery tidak menemukan baris sama sekali.

Tanda [kurung siku] berarti bagian opsional. Kata kunci SQL tidak membedakan huruf besar-kecil, tapi menulisnya dengan huruf besar membuat query lebih mudah dibaca.

Contoh EXISTS

Data contoh: karyawan, penjualan

Tabel karyawan

idnamadept_idkotagajitgl_masukatasan_id
1 Andi Pratama 3 Bandung 12500000 2019-03-11 NULL
2 Bunga Lestari 1 Jakarta 9800000 2020-07-01 NULL
3 Candra Wijaya 3 Bandung 8200000 2021-02-15 1
4 Dewi Anggraini 2 Jakarta 7500000 2022-05-09 6
5 Eko Saputra 1 Jakarta 6900000 2023-01-16 2
6 Fajar Nugroho 2 Surabaya 11000000 2018-09-03 NULL
7 Gita Permata 3 Jakarta 8200000 2023-08-21 1
8 Hendra Gunawan NULL Medan 5500000 2024-04-02 NULL

Tabel penjualan

idtanggalkaryawan_idprodukkategoriqtyharga
1 2026-01-05 4 Laptop Elektronik 2 8500000
2 2026-01-12 6 Printer Elektronik 1 2300000
3 2026-01-20 4 Kursi Kantor Furnitur 5 1200000
4 2026-02-03 6 Laptop Elektronik 1 8500000
5 2026-02-14 4 Meja Kerja Furnitur 3 1750000
6 2026-02-25 5 Kertas A4 ATK 20 55000
7 2026-03-02 6 Kursi Kantor Furnitur 4 1200000
8 2026-03-10 4 Printer Elektronik 2 2300000
9 2026-03-18 5 Kertas A4 ATK 30 55000
10 2026-03-27 6 Monitor Elektronik 3 1900000
query.sql
SELECT nama
FROM karyawan AS k
WHERE EXISTS (
  SELECT 1 FROM penjualan AS p
  WHERE p.karyawan_id = k.id
);
>_ Jalankan & ubah query ini di browser

Hasil 3 baris

nama
Dewi Anggraini
Eko Saputra
Fajar Nugroho

Hanya karyawan yang pernah mencatat penjualan.

Cara kerjanya, langkah demi langkah

  1. Untuk setiap karyawan, database menjalankan subquery: adakah transaksi di tabel penjualan dengan karyawan_id sama dengan id karyawan ini?
  2. Untuk Dewi (id 4): ada 4 transaksi, jadi EXISTS benar dan ia lolos.
  3. Untuk Andi (id 1): tidak ada transaksi sama sekali, jadi ia tidak lolos.
  4. Hasilnya 3 orang yang pernah berjualan: Dewi, Eko, dan Fajar.

Dipakai untuk apa di kantor?

  • Pelanggan yang pernah belanja bulan ini.
  • Produk yang belum pernah terjual, dengan NOT EXISTS.

Kesalahan yang sering terjadi

  • Lupa menghubungkan subquery dengan query luar (bagian WHERE p.karyawan_id = k.id). Tanpa itu, EXISTS selalu benar kalau tabelnya tidak kosong, sehingga semua baris lolos.
Progres bab Subquery & CTE 0/3 dipelajari
Lanjut: OVER & PARTITION BY

Belajar SQL bareng mentor

Hafal sintaks itu mudah. Menjawab pertanyaan bisnis, itu skill.

Private Class Python & SQL untuk Data: dari query dasar sampai JOIN dan studi kasus kerja, dengan kurikulum dan jadwal yang menyesuaikan kamu.

Lihat Private Class