Belajar dengan membaca secara berurutan

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 compoundAND (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.

Sebelum latihan, pastikan definisi kolom tabel staff dan contoh datanya.

① Jalankan PRAGMA table_info(staff); untuk memeriksa nama kolom, tipe, dan primary key.

② Jalankan SELECT * FROM staff LIMIT 5; untuk melihat 5 baris pertama.

SQL Editor

Jalankan query untuk melihat hasil

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 AKondisi BA AND BA OR B
TrueTrueTrueTrue
TrueFalseFalseTrue
FalseTrueFalseTrue
FalseFalseFalseFalse

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.

Prioritas operator logika
NOT(tertinggi)AND(tengah)OR(terendah)berikutnyaberikutnya
NOT mengikat paling kuat, lalu AND, lalu OR — itulah urutan evaluasinya. Saat kamu mencampurnya, tanda kurung membuatmu bisa membuat urutan yang dimaksud eksplisit supaya kamu tidak harus melacak prioritas di kepala.
-- 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';

Bayangkan review bonus butuh "staff yang berbasis di Tokyo dengan salary paling tidak 5.000.000." (Setelah kamu menjalankannya dengan benar, penjelasannya akan muncul.)

① Dari staff, ambil kolom name, city, dan salary.

② Saring ke baris di mana `city` adalah `'Tokyo'` AND `salary` paling tidak 5.000.000.

③ Pastikan hasilnya 3 baris (David Sato 6.800.000 / Grace Suzuki 5.500.000 / Jack Tanaka 5.900.000).

SQL Editor

Jalankan query untuk melihat hasil

Bayangkan pengumuman perlu dikirim ke "staff yang berbasis di region Kanto (Tokyo) atau Kansai (Osaka)."

① Dari staff, ambil kolom name dan city.

② Saring ke baris di mana `city` adalah `'Tokyo'` OR `'Osaka'` (pakai OR).

③ Pastikan hasilnya 6 baris (Alice Tokyo / Bob Osaka / David Tokyo / Frank Osaka / Grace Tokyo / Jack Tokyo).

SQL Editor

Jalankan query untuk melihat hasil

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.

Bagaimana tanda kurung mengubah hasil
Tanpa tanda kurung(meleset dari maksud)Dengan tanda kurung(sesuai maksud)city = 'Tokyo'OR city = 'Osaka'AND salary >= 5000000(city = 'Tokyo' OR city = 'Osaka')AND salary >= 5000000Dibaca sebagaiTokyo OR(Osaka AND high-paid)Dievaluasi sebagai(Tokyo OR Osaka)AND high-paidHasil: 6 baris(termasuk Alice Tokyo 4500k)Hasil: 5 baris(mengecualikan Alice Tokyo 4500k)
Query yang dimaksudkan sebagai "high-paid di Tokyo atau Osaka." Posisi tanda kurung mengubah artinya — dan hasilnya.

`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.

Bayangkan kebutuhan untuk "staff di Tokyo atau Osaka dengan salary paling tidak 5.000.000." Dalam satu konsol, bandingkan hasil dengan tanda kurung versus tanpa untuk melihat bagaimana berubah.

① Dari staff, ambil kolom name, city, dan salary.

② Pertama, tulis bentuk dengan tanda kurung, sesuai maksud ((city = 'Tokyo' OR city = 'Osaka') AND salary >= 5000000).

③ Lalu sengaja lepas tanda kurungnya (city = 'Tokyo' OR city = 'Osaka' AND salary >= 5000000).

④ Pastikan yang pertama mengembalikan 5 baris dan yang kedua mengembalikan 6 baris (Alice Tokyo 4.500.000 ditambahkan) — hasilnya berubah.

SQL Editor

Jalankan query untuk melihat hasil

Bayangkan kebutuhan untuk "membangun daftar semua staff kecuali yang berbasis di Kyoto."

① Dari staff, ambil kolom name dan city.

② Saring ke baris di mana `city` bukan `'Kyoto'` (pakai NOT (kondisi)).

③ Pastikan hasilnya 8 baris (Carol dan Iris dikecualikan).

SQL Editor

Jalankan query untuk melihat hasil
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Bagaimana kondisi WHERE WHERE city = 'Tokyo' OR city = 'Osaka' AND salary >= 5000000 diinterpretasikan?

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?