Filtreleme (WHERE)

WHERE koşulu ile verileri filtreleme, karşılaştırma ve mantıksal operatörler

WHERE Nedir?

WHERE koşulu, belirli kriterlere uyan kayıtları filtrelemek için kullanılır.

Karşılaştırma Operatörleri

OperatörAçıklamaÖrnek
=Eşitstatus = 'active'
<> veya !=Eşit değilstatus <> 'deleted'
>Büyükprice > 100
<Küçükage < 18
>=Büyük eşitquantity >= 10
<=Küçük eşitdiscount <= 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.