Soal 1Bagaimana kondisi WHERE WHERE city = 'Tokyo' OR city = 'Osaka' AND salary >= 5000000 diinterpretasikan?
WHERE Deep Dive ① — AND, OR, NOT untuk Membangun Kondisi Compound
Artikel pertama dari deep-dive WHERE. Mencakup truth table untuk AND / OR / NOT, prioritas operator, dan cara memakai tanda kurung untuk membuat urutan evaluasi eksplisit — semua berjalan pada dataset staff yang dimuat dari CSV.
Data yang akan kita pakai — tabel staff
Mulai dari artikel ini, kita akan menghabiskan tiga artikel untuk melihat lebih dalam pola filter WHERE. Yang pertama adalah operator logika untuk membangun kondisi compound — AND (dan) / OR (atau) / NOT (bukan) — plus prioritas operator dan tanda kurung yang berperan saat kamu mencampurnya.
Dataset topiknya adalah tabel staff (10 baris) yang dimuat dari CSV, dengan kolom name / city / salary / birthday. Kita akan membangun kondisi dunia nyata yang umum seperti "Tokyo dan high-paid," "Tokyo atau Osaka," dan "bukan di Kyoto" memakai setiap operator.
AND, OR, NOT — membangun kondisi dengan operator logika
Operator logika menggabungkan beberapa kondisi dalam satu WHERE. Ada tiga jenisnya.
- `AND`: TRUE hanya saat kedua kondisi TRUE
- `OR`: TRUE saat paling tidak salah satu kondisi TRUE
- `NOT`: menegasi kondisi yang mengikutinya (TRUE → FALSE / FALSE → TRUE)
Sintaksnya cuma menyisipkan keyword: WHERE cond1 AND cond2, WHERE cond1 OR cond2, WHERE NOT (cond). Kamu bisa merantai AND / OR sebanyak yang kamu butuhkan, dan NOT ditaruh di depan satu kondisi.
| Kondisi A | Kondisi B | A AND B | A OR B |
|---|---|---|---|
| True | True | True | True |
| True | False | False | True |
| False | True | False | True |
| False | False | False | False |
Aturan dasarnya adalah: AND TRUE hanya saat keduanya TRUE; OR TRUE saat salah satunya TRUE. Perilaku saat NULL ikut tercampur dalam perbandingan dibahas dua artikel lagi di bawah logika tiga-nilai, tapi untuk artikel ini kita tetap di dunia 2-nilai (TRUE / FALSE) dan cuma belajar cara menyusun kondisi.
-- 1) AND: memenuhi keduanya (Tokyo dan high-paid)
SELECT name, city, salary FROM staff
WHERE city = 'Tokyo' AND salary >= 5000000;
-- 2) OR: memenuhi salah satu (Tokyo atau Osaka)
SELECT name, city FROM staff
WHERE city = 'Tokyo' OR city = 'Osaka';
-- 3) NOT: menegasi kondisi (di mana saja kecuali Kyoto)
SELECT name, city FROM staff
WHERE NOT (city = 'Kyoto');
-- NOT juga bisa ditulis dengan != atau <>
SELECT name, city FROM staff
WHERE city != 'Kyoto';
Prioritas operator — AND mengikat lebih kuat dari OR
Satu aturan yang mutlak harus kamu ketahui saat kamu mencampur AND dan OR adalah bahwa `AND` punya prioritas lebih tinggi daripada `OR`. Menulis A OR B AND C diinterpretasikan sebagai `A OR (B AND C)` — bukan dari kiri ke kanan dalam urutan penulisan.
Ini sering menghasilkan hasil yang tidak sesuai dengan yang kamu maksudkan, jadi saat kamu mencampur AND dan OR, selalu buat urutan evaluasi eksplisit dengan tanda kurung. Tanda kurung tidak hanya mengubah semantik SQL — mereka juga menandakan maksudmu kepada pembaca — jadi bahkan saat artinya sama dengan atau tanpa tanda kurung, kebiasaan baik untuk menaruhnya.
`AND` dievaluasi sebelum `OR`
A OR B AND C diinterpretasikan sebagai `A OR (B AND C)`. AND mengikat lebih kuat dari OR, jadi tidak dibaca dari kiri ke kanan dalam urutan penulisan.
Contoh: WHERE city = 'Tokyo' OR city = 'Osaka' AND salary >= 5000000 artinya `city = 'Tokyo' OR (city = 'Osaka' AND salary >= 5000000)`, jadi semua staff Tokyo tetap terlepas dari salary (Alice Tokyo 4.500.000 termasuk). Kalau kamu memaksudkan "high-paid di antara Tokyo atau Osaka," selalu tulis (city = 'Tokyo' OR city = 'Osaka') AND salary >= 5000000 dan buat urutan evaluasi eksplisit dengan tanda kurung.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Bentuk mana yang mengembalikan hasil yang sama dengan WHERE NOT (city = 'Tokyo')?
Soal 3Penambahan tanda kurung mana yang setara dengan WHERE A AND B OR C?