SQL SELECT WHERE Nasıl Kullanılır? Örneklerle Sorgu Rehberi


0

SQL SELECT WHERE ile satırları filtrelemeyi adım adım öğrenin. T-SQL örnekleriyle AND/OR, LIKE, IN, BETWEEN, NULL ve TOP kullanımını keşfedin.

Önemli not: Örnekler Microsoft SQL Server T-SQL içindir; başka veritabanlarında uyarlama gerekebilir. Gerçek kişi verisi yerine örnek tablo ve değer kullan.

SQL SELECT WHERE, bir tablodan yalnızca belirli koşullara uyan satırları getirmek için kullanılır. SELECT hangi kolonların döneceğini, FROM hangi tablodan okunacağını, WHERE ise hangi satırların filtreleneceğini belirtir. Bu rehberde Microsoft SQL Server T-SQL sözdizimiyle temel filtreleme, mantıksal operatörler, desen eşleştirme ve NULL kontrolü adım adım gösterilir.

SQL SELECT WHERE için kısa yanıt

En basit biçimde sorgu şu yapıdadır: SELECT kolonlar FROM tablo WHERE koşul. WHERE koşulu doğru (TRUE) olan satırlar sonuç kümesine girer. Koşul yanlış (FALSE) veya bilinmeyen (UNKNOWN) olan satırlar döndürülmez. Bu nedenle NULL değerler özel dikkat gerektirir.

Temel SELECT WHERE iskeleti

SELECT MusteriID, Ad, Soyad
FROM dbo.Musteriler
WHERE Sehir = 'Ankara';

Ön koşullar ve örnek tablo

Örnekleri kendi ortamınızda denemek için SQL Server Management Studio (SSMS) veya Azure Data Studio gibi bir istemciye bağlanın. Aşağıdaki örnek tablo, gerçek kişi verisi içermeyen kurgusal değerlerle oluşturulur. Üretim veritabanında çalıştırmadan önce mutlaka test ortamı kullanın.

Örnek tablo oluşturma ve veri ekleme

CREATE TABLE dbo.Musteriler (
    MusteriID INT PRIMARY KEY,
    Ad NVARCHAR(50) NOT NULL,
    Soyad NVARCHAR(50) NOT NULL,
    Sehir NVARCHAR(50) NULL,
    KayitTarihi DATE NOT NULL,
    Puan INT NULL
);

INSERT INTO dbo.Musteriler (MusteriID, Ad, Soyad, Sehir, KayitTarihi, Puan)
VALUES
(1, 'Ayşe', 'Yılmaz', 'Ankara', '2023-01-15', 120),
(2, 'Mehmet', 'Demir', 'İstanbul', '2023-03-22', 80),
(3, 'Zeynep', 'Kaya', 'İzmir', '2022-11-05', NULL),
(4, 'Ali', 'Çelik', 'Ankara', '2024-02-10', 200),
(5, 'Fatma', 'Şahin', NULL, '2023-07-19', 50);

Adım adım SQL SELECT WHERE kullanımı

  1. SELECT ile getirmek istediğiniz kolonları listeleyin. Tüm kolonlar için SELECT * yerine gerekli kolonları yazmak daha okunur ve daha az veri döndürür.
  2. FROM ile tabloyu belirtin. Şema adını (örneğin dbo) eklemek belirsizliği azaltır.
  3. WHERE ile filtre koşulunu yazın. Metin değerleri tek tırnak içinde, sayısal değerler tırnaksız yazılır.
  4. Birden fazla koşulu AND veya OR ile birleştirin. Karışık kullanımda parantezlerle önceliği açıkça belirtin.
  5. Desen araması için LIKE, liste karşılaştırması için IN, aralık için BETWEEN kullanın.
  6. NULL kontrolü için = veya <> yerine IS NULL ve IS NOT NULL yazın.
  7. Sonucu sıralamak için ORDER BY, satır sayısını sınırlamak için TOP ekleyin.
  8. Sorguyu çalıştırmadan önce SELECT ile doğrulayın; güncelleme veya silme gerekiyorsa önce etkilenecek satırları SELECT ile görün.

SELECT ile kolon seçimi ve FROM ile tablo belirtme

SELECT listesi yalnızca ihtiyaç duyduğunuz kolonları içermelidir. Gereksiz kolonlar ağ trafiğini ve okuma maliyetini artırır. FROM ifadesinde tablo adını şema ile birlikte yazmak, aynı isimli nesnelerin karışmasını önler.

Belirli kolonları seçme

SELECT Ad, Soyad, Sehir
FROM dbo.Musteriler;

WHERE filtreleri: eşitlik ve karşılaştırma

WHERE koşulunda =, <>, >, <, >= ve <= gibi karşılaştırma operatörleri kullanılır. Metin karşılaştırmalarında büyük/küçük harf duyarlılığı veritabanı harmanlamasına (collation) bağlıdır. Sayısal ve tarih değerlerini uygun türde yazın.

Eşitlik ve sayısal karşılaştırma

SELECT MusteriID, Ad, Soyad, Puan
FROM dbo.Musteriler
WHERE Sehir = 'Ankara' AND Puan >= 100;

AND, OR ve parantez kullanımı

AND her iki koşulun da doğru olmasını, OR ise en az birinin doğru olmasını ister. AND, OR'dan daha yüksek önceliğe sahiptir. Bu nedenle karışık koşullarda parantez kullanmak mantık hatasını önler.

Parantezle koşul önceliği

SELECT MusteriID, Ad, Sehir, Puan
FROM dbo.Musteriler
WHERE (Sehir = 'Ankara' OR Sehir = 'İzmir')
  AND Puan > 60;

LIKE, IN ve BETWEEN ile filtreleme

LIKE desen eşleştirme için kullanılır; % sıfır veya daha fazla karakteri, _ tek karakteri temsil eder. IN, bir değer listesine üyelik kontrolü sağlar. BETWEEN ise iki sınır arasındaki değerleri, sınırlar dahil olacak şekilde getirir.

LIKE, IN ve BETWEEN örnekleri

SELECT MusteriID, Ad, Soyad
FROM dbo.Musteriler
WHERE Ad LIKE 'A%';

SELECT MusteriID, Ad, Sehir
FROM dbo.Musteriler
WHERE Sehir IN ('Ankara', 'İzmir');

SELECT MusteriID, Ad, KayitTarihi
FROM dbo.Musteriler
WHERE KayitTarihi BETWEEN '2023-01-01' AND '2023-12-31';

NULL kontrolü: IS NULL ve IS NOT NULL

NULL, bilinmeyen veya eksik değeri temsil eder. NULL ile = veya <> kullanmak beklenen sonucu vermez; çünkü karşılaştırma UNKNOWN döner. Bu nedenle NULL kontrolü için IS NULL ve IS NOT NULL kullanılmalıdır.

NULL değerleri filtreleme

SELECT MusteriID, Ad, Sehir
FROM dbo.Musteriler
WHERE Sehir IS NULL;

SELECT MusteriID, Ad, Puan
FROM dbo.Musteriler
WHERE Puan IS NOT NULL;

Sıralama ve TOP ile sonucu daraltma

ORDER BY, sonuç kümesini bir veya daha fazla kolona göre sıralar; ASC artan, DESC azalan sıralamadır. TOP, döndürülecek satır sayısını sınırlar. TOP kullanırken anlamlı bir sıralama vermek sonucu belirli kılar.

ORDER BY ve TOP

SELECT TOP (3) MusteriID, Ad, Puan
FROM dbo.Musteriler
WHERE Puan IS NOT NULL
ORDER BY Puan DESC;

Kontrol noktaları ve beklenen sonuç

  • Sorgu yalnızca WHERE koşulunu sağlayan satırları döndürmelidir; koşulu sağlamayan satırlar sonuçta görünmemelidir.
  • Metin değerleri tek tırnak içinde, sayısal değerler tırnaksız yazılmalıdır.
  • NULL içeren kolonlarda = yerine IS NULL kullanılmalıdır.
  • AND/OR karışık kullanıldığında parantezler mantığı netleştirmelidir.
  • TOP kullanıldığında ORDER BY ile deterministik sıra sağlanmalıdır.
  • Üretim verisine karşı çalıştırmadan önce test ortamında doğrulama yapılmalıdır.

Beklenen sonuç, filtre koşuluna uyan satırların yalnızca seçilen kolonlarla dönmesidir. Örneğin Ankara ve Puan >= 100 koşulu, örnek veride Ayşe Yılmaz ve Ali Çelik satırlarını getirir. Sonuç kümesinin kolon başlıkları SELECT listesindeki sırayla görünür.

Geri alma ve kurtarma: yanlış filtre veya güncelleme

SELECT sorguları veriyi değiştirmez; yanlış filtre yalnızca yanlış sonuç döndürür. Ancak WHERE koşuluyla çalıştırılan UPDATE veya DELETE işlemleri veriyi değiştirebilir. Bu nedenle önce etkilenecek satırları SELECT ile doğrulayın, işlemi BEGIN TRANSACTION içinde deneyin ve sonucu kontrol ettikten sonra COMMIT veya ROLLBACK ile karar verin.

Önce SELECT ile doğrulama

SELECT MusteriID, Ad, Puan
FROM dbo.Musteriler
WHERE Sehir = 'Ankara' AND Puan < 150;

Transaction içinde deneme ve geri alma

BEGIN TRANSACTION;

UPDATE dbo.Musteriler
SET Puan = Puan + 10
WHERE Sehir = 'Ankara' AND Puan < 150;

-- Etkilenen satırları kontrol edin
SELECT MusteriID, Ad, Puan
FROM dbo.Musteriler
WHERE Sehir = 'Ankara' AND Puan < 160;

-- Sonuç doğruysa COMMIT, değilse ROLLBACK kullanın
ROLLBACK TRANSACTION;

Yanlış bir güncelleme yapıldıysa ve transaction henüz kapatılmadıysa ROLLBACK ile geri dönün. İşlem commit edildiyse geri alma için yedekten restore veya nokta kurtarma gerekir. Bu nedenle üretim ortamında değişiklik öncesi yedek alın.

Sık hatalar ve çözümleri

  • NULL karşılaştırması: Sehir = NULL yerine Sehir IS NULL kullanın.
  • Metin değerini tırnaksız yazmak: WHERE Sehir = Ankara yerine WHERE Sehir = 'Ankara' yazın.
  • AND/OR önceliğini göz ardı etmek: Karışık koşullarda parantez ekleyin.
  • LIKE deseninde yanlış joker: Tek karakter için _ , çok karakter için % kullanın.
  • TOP ile sıralama vermemek: TOP kullanırken ORDER BY ekleyin.
  • Tarih biçimini belirsiz bırakmak: 'YYYY-MM-DD' gibi açık biçim kullanın.

Performans ve kişisel veri notları

WHERE koşulunda kolon üzerinde fonksiyon kullanmak indeks kullanımını engelleyebilir. Mümkünse kolonu doğrudan karşılaştırın. SELECT * yerine gerekli kolonları seçin. Gerçek kişi verisi içeren tablolarda yalnızca yetkili kullanıcılarla çalışın ve sonuçları paylaşırken kişisel verileri maskeleyin.

Bu rehberdeki örnekler Microsoft SQL Server T-SQL içindir. Sürüm ve özellik davranışları için resmi Microsoft Learn Transact-SQL başvurusunu esas alın. Başka veritabanı sistemlerinde sözdizimi ve NULL davranışı farklılık gösterebilir.

Sık sorulan sorular

SQL SELECT WHERE ile SELECT arasındaki fark nedir?

SELECT hangi kolonların döneceğini belirtir; WHERE ise hangi satırların filtreleneceğini belirler. WHERE yoksa tablodaki tüm satırlar seçilen kolonlarla döner.

WHERE koşulunda NULL neden = ile çalışmaz?

NULL bilinmeyen değeri temsil eder; NULL = NULL karşılaştırması UNKNOWN döner ve satır seçilmez. Bu nedenle IS NULL veya IS NOT NULL kullanılmalıdır.

AND ve OR birlikte kullanıldığında hangisi önce gelir?

AND, OR'dan daha yüksek önceliğe sahiptir. Karışık koşullarda beklenen mantığı garanti etmek için parantez kullanın.

LIKE ile büyük/küçük harf duyarlılığı nasıl belirlenir?

Duyarlılık veritabanı veya kolon harmanlamasına (collation) bağlıdır. Aynı sorgu farklı harmanlamalarda farklı sonuç verebilir.

TOP kullanırken neden ORDER BY eklemeliyim?

ORDER BY olmadan satırların dönüş sırası garanti edilmez. TOP ile birlikte ORDER BY kullanmak hangi satırların seçileceğini belirli kılar.

WHERE koşuluyla UPDATE veya DELETE çalıştırmadan önce ne yapmalıyım?

Önce aynı koşulla SELECT çalıştırıp etkilenecek satırları doğrulayın. Ardından işlemi BEGIN TRANSACTION içinde deneyin ve sonucu kontrol ederek COMMIT veya ROLLBACK seçin.

Resmî kaynaklar

30320 Puan