Koşulları birleştirmek
- AND: Her iki koşul da doğru olmalı.
- OR: En az biri doğru olmalı.
- NOT: Koşulu tersine çevirir.
SELECT name, category, price FROM products WHERE category = 'Elektronik' AND price < 1000;
Öncelik tuzağı
SQL'de AND, OR'dan önce değerlendirilir (matematikte çarpmanın toplamadan önce gelmesi gibi). Şu sorgu ne döndürür?
-- Niyet: Kitap veya Kozmetik kategorisinde, 200 TL altı ürünler SELECT name, category, price FROM products WHERE category = 'Kitap' OR category = 'Kozmetik' AND price < 200;
Bu sorgu “Kitap olan HER ürün” VEYA “200 TL altı Kozmetik ürünleri” döndürür, çünkü AND önce bağlanır. Doğrusu parantez kullanmak:
SELECT name, category, price FROM products WHERE (category = 'Kitap' OR category = 'Kozmetik') AND price < 200;
Altın kuralAND ve OR'u birlikte kullandığında her zaman parantez koy. Hem hatayı önler hem de okuyan kişiye niyetini gösterir.
Derinleş: doğruluk tablosu ve NOT
NOT, koşulun tamamını tersine çevirir. NOT (A AND B), NOT A OR NOT B ile aynıdır (De Morgan kuralı). Şu iki sorgu aynı sonucu verir:
SELECT COUNT(*) FROM lk_orders WHERE NOT (status = 'teslim' AND payment = 'kart'); SELECT COUNT(*) FROM lk_orders WHERE status <> 'teslim' OR payment <> 'kart';
Parantez yazmak hem hatayı önler hem de okuyan kişiye niyetini gösterir. Bir koşulu yazdıktan sonra küçük bir örnek satır üzerinde sesli dene: “Bu satır gelir mi?”