0Pricing
SQL Academy · Pelajaran

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 EXISTS jika 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:

  • IN memeriksa keanggotaan — bernilai benar jika nilai cocok dengan elemen apa pun dalam daftar atau subkueri.
  • = ANY setara dengan IN; penggunaan operator lain seperti > ANY berarti bernilai benar untuk setidaknya satu kecocokan.
  • ALL berarti kondisi harus berlaku untuk setiap nilai yang dikembalikan subkueri.
  • NOT IN diam-diam tidak mengembalikan baris ketika subkueri berisi NULL — selalu tangani kemungkinan ini.
  • Gunakan NOT EXISTS sebagai alternatif yang lebih aman daripada NOT IN ketika 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

  1. Subkueri Berkorelasi
  2. EXISTS dan NOT EXISTS
  3. IN vs ANY vs ALL
  4. Kinerja EXISTS vs JOIN
← Kembali ke SQL Academy