İçeriğe geç
Educora
Başlangıç16 dk4 / 22

LIKE, IN, BETWEEN ve IS NULL

Kalıba göre aramayı (LIKE), bir değer listesiyle eşleştirmeyi (IN), aralık seçmeyi (BETWEEN) ve eksik verilerle (NULL) çalışmayı öğren.

Kendini test et
Bu derste öğreneceklerin
  • LIKE ve %, _ joker karakterleriyle metin aramak
  • IN ve BETWEEN ile koşulları kısa yazmak
  • NULL kavramını anlamak, IS NULL ve COALESCE kullanmak

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ıpNeyle eşleşirÖrnek değer
'A%'A ile başlayanAysel
'%ova'ova ile bitenAbbasova
'%set%'içinde set geçenChess set
'_u%'ikinci harfi u olanMurad
'____'tam dört karakterden oluşanQuba
SQL
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
Soyadı “ova” ile biten öğrenciler.
SQL
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.

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

SQL
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
SQL
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
Şubat ve mart siparişleri. Tarihlerde saat de olsaydı (2025-03-31 14:00), 31 Mart öğleden sonrası aralığın dışında kalırdı.

NULL: veri yok

Tanım
NULL

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.

SQL
SELECT NULL = NULL AS a,
       NULL + 5    AS b,
       5 > NULL    AS c;
▸ Beklenen çıktı
a | b | c
NULL | NULL | NULL
SQL
-- 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.
SQL
-- 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.

SQL
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
Örnek görev

Bakü ya da Sumqayıt'ta yaşayan, 14–15 yaşında ve e-postası olan öğrencileri bul.

Çözümü göster
Üç koşulu 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.
SQL
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
Alıştırma

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.

Alıştırma · SQL
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
Alıştırma

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.

Alıştırma · SQL
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

  • LIKE kalıba göre arar: % herhangi sayıda karakter, _ tam olarak bir karakterdir.
  • IN (...) uzun bir OR zincirinin yerini tutar; NOT IN listede olmayanları seçer.
  • BETWEEN a AND b iki sınırı da içerir; küçük değer önce yazılır.
  • NULL “veri yok” demektir; onunla karşılaştırma NULL verir.
  • Eksik değerleri IS NULL / IS NOT NULL ile denetle, COALESCE ile değiştir.

Kendini test et

10 soru. Her doğru cevap XP kazandırır.

1 / 10
Hangi kalıp A ile başlayan adları bulur?