WHERE Nedir?
WHERE koşulu, belirli kriterlere uyan kayıtları filtrelemek için kullanılır.
Karşılaştırma Operatörleri
| Operatör | Açıklama | Örnek |
|---|---|---|
| = | Eşit | status = 'active' |
| <> veya != | Eşit değil | status <> 'deleted' |
| > | Büyük | price > 100 |
| < | Küçük | age < 18 |
| >= | Büyük eşit | quantity >= 10 |
| <= | Küçük eşit | discount <= 50 |
Basit Koşullar
-- Eşitlik kontrolü
SELECT * FROM products WHERE price > 100;
-- String karşılaştırma
SELECT * FROM users WHERE status = 'active';
-- Tarih karşılaştırma
SELECT * FROM orders WHERE created_at > '2024-01-01';
Çoklu Koşullar (AND, OR)
-- AND: Her iki koşul da doğru olmalı
SELECT * FROM products
WHERE price > 100 AND stock > 0;
-- OR: Koşullardan biri doğru olmalı
SELECT * FROM users
WHERE role = 'admin' OR role = 'moderator';
-- Karmaşık koşullar (parantez kullanımı önemli!)
SELECT * FROM products
WHERE (category = 'Electronics' OR category = 'Computers')
AND price < 1000
AND stock > 0;
AND ve OR birlikte kullanırken parantez kullanın! Öncelik hataları beklenmeyen sonuçlara yol açar.
IN Operatörü
-- Belirli değerler listesinde arama
SELECT * FROM users
WHERE country IN ('Turkey', 'Germany', 'USA', 'UK');
-- NOT IN: Liste dışındakiler
SELECT * FROM users
WHERE status NOT IN ('banned', 'deleted', 'suspended');
-- Subquery ile IN
SELECT * FROM users
WHERE id IN (
SELECT user_id FROM orders WHERE total > 1000
);
BETWEEN - Aralık Sorgusu
-- Sayısal aralık
SELECT * FROM products
WHERE price BETWEEN 50 AND 200;
-- Tarih aralığı
SELECT * FROM orders
WHERE created_at BETWEEN '2024-01-01' AND '2024-12-31';
-- NOT BETWEEN
SELECT * FROM products
WHERE price NOT BETWEEN 100 AND 500;
BETWEEN sınır değerleri dahil eder: BETWEEN 50 AND 200, 50 ve 200'ü de kapsar.
LIKE - Metin Arama
-- % = sıfır veya daha fazla karakter
-- _ = tam olarak bir karakter
-- İle başlayan
SELECT * FROM users WHERE name LIKE 'A%';
-- İle biten
SELECT * FROM users WHERE email LIKE '%@gmail.com';
-- İçeren
SELECT * FROM products WHERE name LIKE '%phone%';
-- Belirli uzunlukta (3 harfli isimler)
SELECT * FROM users WHERE name LIKE '___';
-- Case-insensitive arama (PostgreSQL'de ILIKE)
SELECT * FROM users WHERE email ILIKE '%GMAIL%';
NULL Kontrolü
-- NULL olan kayıtlar
SELECT * FROM users WHERE phone IS NULL;
-- NULL olmayan kayıtlar
SELECT * FROM users WHERE phone IS NOT NULL;
-- NULL ve değer kontrolü birlikte
SELECT * FROM orders
WHERE shipped_at IS NULL AND status = 'processing';
NULL ile = veya != kullanmak ÇALIŞMAZ! WHERE phone = NULL yanlış, WHERE phone IS NULL doğru.