LIKEve%,_joker karakterleriyle metin aramakINveBETWEENile koşulları kısa yazmakNULLkavramını anlamak,IS NULLveCOALESCEkullanmak
Arama kutusuna soyadın yalnızca bir kısmını yazdığında site yine de doğru kişiyi bulur. Peki “Sumqayıt, Quba veya Nahçıvan'dan gelen öğrenciler”, “fiyatı 10 ile 55 arasındaki ürünler” ya da “e-postası olmayan öğrenciler” nasıl bulunur? SQL'de bunun için dört özel işleç vardır: LIKE, IN, BETWEEN ve IS NULL.
LIKE: kalıba göre arama
LIKE, metni bir kalıpla karşılaştırır. Kalıpta iki özel simge vardır: % herhangi sayıda karakterin (sıfır da olabilir), _ ise tam olarak bir karakterin yerini tutar.
| Kalıp | Neyle eşleşir | Örnek değer |
|---|---|---|
| 'A%' | A ile başlayan | Aysel |
| '%ova' | ova ile biten | Abbasova |
| '%set%' | içinde set geçen | Chess set |
| '_u%' | ikinci harfi u olan | Murad |
| '____' | tam dört karakterden oluşan | Quba |
SELECT first_name, last_name
FROM students
WHERE last_name LIKE '%ova'
ORDER BY id;▸ Beklenen çıktı
first_name | last_name Aysel | Məmmədova Leyla | Hüseynova Günay | Abbasova Səbinə | Nəsirova Fidan | Cəfərova
SELECT first_name
FROM students
WHERE first_name LIKE '_u%'
ORDER BY id;▸ Beklenen çıktı
first_name Murad Tural
_ tam olarak bir karakter, % ise geri kalan her şeydir.IN: değer listesi
city = 'Sumqayıt' OR city = 'Quba' OR city = 'Naxçıvan' yazmak uzun ve yorucudur. IN işleci aynı şeyi kısaca söyler: değer parantez içindeki listede varsa koşul doğrudur. NOT IN ise tersine, listede olmayan değerleri seçer.
SELECT first_name, city
FROM students
WHERE city IN ('Sumqayıt', 'Quba', 'Naxçıvan')
ORDER BY id;▸ Beklenen çıktı
first_name | city Elvin | Sumqayıt Səbinə | Quba Fidan | Naxçıvan Orxan | Sumqayıt
SELECT name, category
FROM products
WHERE category NOT IN ('Electronics', 'Stationery')
ORDER BY id;▸ Beklenen çıktı
name | category Backpack | Accessories Desk lamp | Home Water bottle | Accessories Chess set | Games
BETWEEN: aralık
x BETWEEN a AND b koşulu x >= a AND x <= b ile aynıdır; yani iki sınır da dahildir. Aşağıda fiyatı tam 55 olan Backpack de sonuçtadır. Küçük değer her zaman önce yazılır: BETWEEN 55 AND 10 hiçbir şey döndürmez.
SELECT name, price
FROM products
WHERE price BETWEEN 10 AND 55
ORDER BY price;▸ Beklenen çıktı
name | price Water bottle | 12 Desk lamp | 34.99 Chess set | 42 Backpack | 55
SELECT id, customer_id, order_date
FROM orders
WHERE order_date BETWEEN '2025-02-01' AND '2025-03-31'
ORDER BY order_date;▸ Beklenen çıktı
id | customer_id | order_date 3 | 2 | 2025-02-02 4 | 3 | 2025-02-10 5 | 4 | 2025-03-05 6 | 5 | 2025-03-18
2025-03-31 14:00), 31 Mart öğleden sonrası aralığın dışında kalırdı.NULL: veri yok
Bir değerin olmadığını ya da bilinmediğini gösteren özel işaret. NULL sıfır değildir, boş metin ('') de değildir; yalnızca “veri yok” demektir.
Bilinmeyen bir değerle yapılan her karşılaştırma ya da hesaplama yine bilinmeyen bir sonuç, yani NULL verir. NULL = NULL bile doğru değil, NULL sonucunu verir: iki bilinmeyen değerin eşit olup olmadığını bilemeyiz. WHERE ise yalnızca koşulun doğru olduğu satırları bırakır.
SELECT NULL = NULL AS a,
NULL + 5 AS b,
5 > NULL AS c;▸ Beklenen çıktı
a | b | c NULL | NULL | NULL
-- wrong: the condition is never true
SELECT COUNT(*) AS found
FROM students
WHERE email = NULL;▸ Beklenen çıktı
found 0
COUNT(*) bulunan satırları sayar. = NULL ile hiçbir şey bulunmaz, oysa iki öğrencinin e-postası yok.-- right: IS NULL
SELECT first_name, last_name, email
FROM students
WHERE email IS NULL
ORDER BY id;▸ Beklenen çıktı
first_name | last_name | email Elvin | Quliyev | NULL Tural | İsmayılov | NULL
IS NOT NULL ise değeri olan satırları seçer. Sonuçta NULL yerine başka bir şey göstermek için COALESCE(a, b, ...) fonksiyonu kullanılır: listedeki NULL olmayan ilk değeri döndürür. SQLite ve MySQL'de bunun kısa biçimi IFNULL(a, b), SQL Server'da ise ISNULL(a, b) fonksiyonudur; COALESCE hepsinde çalışır.
SELECT first_name,
COALESCE(email, 'no email') AS contact
FROM students
WHERE grade = 11
ORDER BY id;▸ Beklenen çıktı
first_name | contact Elvin | no email Tural | no email Fidan | fidan@example.com
Bakü ya da Sumqayıt'ta yaşayan, 14–15 yaşında ve e-postası olan öğrencileri bul.
Çözümü gösterÇözümü gizle
AND ile birleştiririz:şehir listede —
city IN ('Bakı', 'Sumqayıt');yaş aralıkta —
age BETWEEN 14 AND 15;e-posta var —
email IS NOT NULL.Sonuç: Aysel, Leyla, Kamran ve Orxan. Elvin de Sumqayıt'tan, ama 17 yaşında ve e-postası yok.
SELECT first_name, city, age
FROM students
WHERE city IN ('Bakı', 'Sumqayıt')
AND age BETWEEN 14 AND 15
AND email IS NOT NULL
ORDER BY id;▸ Beklenen çıktı
first_name | city | age Aysel | Bakı | 15 Leyla | Bakı | 14 Kamran | Bakı | 15 Orxan | Sumqayıt | 14
Fiyatı 30 ile 150 arasında olan (sınırlar dahil) ve Electronics, Home ya da Games kategorisindeki ürünlerin adını ve fiyatını göster. Sonucu fiyata göre artan sırada sırala.
SELECT name, price
FROM products
-- use BETWEEN and IN
ORDER BY price;▸ Beklenen çıktı
name | price Desk lamp | 34.99 Chess set | 42 Headphones | 120.5
Soyadı ov ile biten ve e-postası olan öğrencilerin adını, soyadını ve e-postasını göster. Sonucu ada (first_name) göre sırala.
SELECT first_name, last_name, email
FROM students
-- add the two conditions
ORDER BY first_name;▸ Beklenen çıktı
first_name | last_name | email Kamran | Həsənov | kamran@example.com Rəşad | Kərimov | rashad@example.com
Önemli noktalar
LIKEkalıba göre arar:%herhangi sayıda karakter,_tam olarak bir karakterdir.IN (...)uzun birORzincirinin yerini tutar;NOT INlistede olmayanları seçer.BETWEEN a AND biki sınırı da içerir; küçük değer önce yazılır.NULL“veri yok” demektir; onunla karşılaştırmaNULLverir.- Eksik değerleri
IS NULL/IS NOT NULLile denetle,COALESCEile değiştir.
Kendini test et
10 soru. Her doğru cevap XP kazandırır.