IN vs ANY vs ALL
Bandingkan dengan sekumpulan nilai.
IN vs ANY vs ALL adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Apa Itu IN, ANY, dan ALL?
Saat menulis kueri SQL, Anda sering perlu membandingkan suatu nilai dengan sekumpulan nilai. SQL menyediakan tiga operator yang ampuh untuk ini: IN, ANY, dan ALL.
Ketiganya dapat bekerja dengan subkueri yang mengembalikan daftar nilai. Bentuknya mirip, tetapi cara kerjanya berbeda — memilih operator yang tepat dapat membuat kueri Anda lebih ekspresif dan efisien.
Operator IN
Operator IN memeriksa apakah suatu nilai cocok dengan nilai apa pun dalam daftar atau hasil subkueri. Operator ini adalah yang paling sederhana di antara ketiganya.
Contoh di bawah ini mengambil karyawan yang bekerja di departemen Penjualan, HR, atau Rekayasa.
SELECT name, department
FROM employees
WHERE department IN ('Sales', 'HR', 'Engineering');IN dengan Subkueri
IN menjadi sangat ampuh ketika dipasangkan dengan subkueri. Alih-alih menggunakan daftar yang ditulis langsung, Anda dapat mengambil nilai pembanding langsung dari tabel lain.
Di sini, kita mencari semua karyawan yang tergabung dalam departemen dengan anggaran di atas 100.000.
SELECT name, department
FROM employees
WHERE department IN (
SELECT dept_name
FROM departments
WHERE budget > 100000
);Operator ANY
ANY (yang juga ditulis sebagai SOME) membandingkan suatu nilai dengan setiap nilai yang dikembalikan subkueri menggunakan operator perbandingan seperti =, >, <, >=, atau <=.
Kondisi bernilai benar jika perbandingan tersebut benar untuk setidaknya satu nilai dalam hasil subkueri.
SELECT name, salary
FROM employees
WHERE salary > ANY (
SELECT salary
FROM employees
WHERE department = 'HR'
);= ANY Setara dengan IN
Kesetaraan penting untuk diketahui: = ANY (subquery) secara logis identik dengan IN (subquery). Keduanya mengembalikan nilai benar ketika nilainya cocok dengan setidaknya satu hasil dari subkueri.
Kedua kueri ini menghasilkan hasil yang sama:
-- Using IN
SELECT name FROM employees
WHERE department_id IN (SELECT id FROM departments WHERE location = 'NYC');
-- Using = ANY
SELECT name FROM employees
WHERE department_id = ANY (SELECT id FROM departments WHERE location = 'NYC');Operator ALL
ALL membandingkan suatu nilai dengan setiap nilai dalam hasil subkueri. Kondisi bernilai benar hanya jika perbandingan berlaku untuk semua nilai yang dikembalikan.
Contoh ini menemukan karyawan yang gajinya lebih besar daripada setiap gaji pada tingkat peserta magang — artinya, mereka berpenghasilan lebih banyak daripada peserta magang dengan gaji tertinggi.
SELECT name, salary
FROM employees
WHERE salary > ALL (
SELECT salary
FROM employees
WHERE job_grade = 'Intern'
);ANY vs ALL — Berdampingan
Perbedaan utamanya: ANY memerlukan kondisi bernilai benar untuk setidaknya satu nilai, sedangkan ALL memerlukannya untuk setiap nilai.
Bayangkan seperti ini: ANY seperti OR di seluruh perbandingan, dan ALL seperti AND di seluruh perbandingan.
-- Returns rows where salary > at least one value in the subquery
SELECT name, salary FROM employees
WHERE salary > ANY (SELECT salary FROM employees WHERE department = 'Support');
-- Returns rows where salary > every value in the subquery
SELECT name, salary FROM employees
WHERE salary > ALL (SELECT salary FROM employees WHERE department = 'Support');NOT IN vs <> ALL
Sebagaimana = ANY mencerminkan IN, operator <> ALL setara dengan NOT IN. Keduanya hanya mengembalikan nilai benar ketika nilainya tidak cocok dengan nilai apa pun dalam subkueri.
Namun, berhati-hatilah — jika subkueri mengembalikan bahkan satu NULL, NOT IN tidak akan mengembalikan baris sama sekali karena logika tiga nilai SQL.
-- Using NOT IN
SELECT name FROM employees
WHERE department_id NOT IN (SELECT id FROM departments WHERE location = 'Remote');
-- Using <> ALL (equivalent)
SELECT name FROM employees
WHERE department_id <> ALL (SELECT id FROM departments WHERE location = 'Remote');Jebakan NULL pada NOT IN
Satu hal penting yang perlu diwaspadai: jika subkueri yang digunakan bersama NOT IN mengembalikan sebuah NULL, seluruh kondisi NOT IN bernilai UNKNOWN untuk setiap baris, sehingga menghasilkan kumpulan hasil kosong.
Untuk menghindari hal ini, saring NULL dari subkueri, atau gunakan NOT EXISTS — yang menangani NULL dengan aman.
-- Dangerous: if manager_id has any NULL, no rows are returned
SELECT name FROM employees
WHERE id NOT IN (SELECT manager_id FROM employees);
-- Safe: filter NULLs explicitly
SELECT name FROM employees
WHERE id NOT IN (
SELECT manager_id FROM employees
WHERE manager_id IS NOT NULL
);Contoh Praktis: Menemukan Karyawan Bergaji Tinggi
Mari kita lihat penerapan ketiga operator dalam skenario nyata. Kita memiliki tabel employees dengan kolom name, department, dan salary.
Kita ingin menemukan karyawan yang berpenghasilan lebih besar daripada gaji rata-rata setiap departemen secara individual — artinya, lebih besar daripada rata-rata setidaknya satu departemen.
SELECT name, salary
FROM employees
WHERE salary > ANY (
SELECT AVG(salary)
FROM employees
GROUP BY department
)
ORDER BY salary DESC;Kapan Menggunakan yang Mana?
Berikut panduan singkat untuk memilih di antara ketiga operator tersebut:
- IN — ketika Anda memiliki daftar statis atau memerlukan pencocokan kesetaraan sederhana dengan subkueri.
- = ANY — sama dengan IN, tetapi memungkinkan Anda menggunakan operator perbandingan lain seperti
>,<. - ALL — ketika kondisi harus berlaku terhadap setiap nilai (misalnya, lebih besar daripada nilai maksimum tanpa menggunakan MAX).
- NOT IN — praktis, tetapi waspadalah terhadap NULL; pilih
NOT EXISTSjika subkueri mungkin berisi NULL.
Pemeriksaan Singkat
Uji pemahaman Anda tentang IN, ANY, dan ALL.
Rangkuman Pelajaran
Dalam pelajaran ini, Anda mempelajari cara membandingkan nilai dengan suatu kumpulan menggunakan IN, ANY, dan ALL.
Poin utama:
INmemeriksa keanggotaan — bernilai benar jika nilai cocok dengan elemen apa pun dalam daftar atau subkueri.= ANYsetara denganIN; penggunaan operator lain seperti> ANYberarti bernilai benar untuk setidaknya satu kecocokan.ALLberarti kondisi harus berlaku untuk setiap nilai yang dikembalikan subkueri.NOT INdiam-diam tidak mengembalikan baris ketika subkueri berisi NULL — selalu tangani kemungkinan ini.- Gunakan
NOT EXISTSsebagai alternatif yang lebih aman daripadaNOT INketika NULL mungkin ada.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “IN vs ANY vs ALL” gratis?
Ya — teks lengkap “IN vs ANY vs ALL” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “IN vs ANY vs ALL”?
Bandingkan dengan sekumpulan nilai. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “IN vs ANY vs ALL” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Subkueri Berkorelasi
- EXISTS dan NOT EXISTS
- IN vs ANY vs ALL
- Kinerja EXISTS vs JOIN