SQL’de veri sorgulama, bir veritabanından bilgi çekmenin temelini oluşturur. SELECT deyimi, bu sürecin kalbidir ve istediğimiz veriyi, belirli koşullara göre seçmemizi sağlar. Bu güçlü komut sayesinde, tablolarımızdaki milyonlarca kayıttan sadece ihtiyacımız olanları hızlı ve etkin bir şekilde alabiliriz. Veri analizi, raporlama ve uygulama geliştirme için vazgeçilmez bir araçtır.

Temel SELECT Deyimi: Veri Çekmeye Giriş

SELECT deyimi, bir veritabanı tablosundan veya birden fazla tablodan veri almak için kullanılır. En basit haliyle, bir tablodaki tüm sütunları veya belirli sütunları seçmenize olanak tanır.

Tüm Sütunları Seçme

Bir tablodaki tüm sütunlardaki verileri almak için yıldız (*) operatörünü kullanırız. Bu, tablonun tüm yapısını ve içeriğini görmenin hızlı bir yoludur.

SELECT *
FROM Musteriler;

Bu sorgu, Musteriler tablosundaki her sütundaki tüm kayıtları döndürecektir.

Belirli Sütunları Seçme

Genellikle, bir tablonun tüm sütunlarına değil, sadece belirli bilgilere ihtiyacımız olur. Bu durumda, almak istediğiniz sütun adlarını virgülle ayırarak belirtiriz.

SELECT MusteriAdi, Sehir, Ulke
FROM Musteriler;

Bu sorgu, Musteriler tablosundan yalnızca MusteriAdi, Sehir ve Ulke sütunlarını getirecektir.

Verileri Filtreleme: WHERE Yan Tümcesi

WHERE yan tümcesi, SELECT deyiminin en güçlü bileşenlerinden biridir ve sorgu sonuçlarını belirli kriterlere göre filtrelemenizi sağlar. Yalnızca belirtilen koşulları karşılayan satırlar döndürülür.

Karşılaştırma Operatörleri

Verileri filtrelemek için çeşitli karşılaştırma operatörleri kullanılır:

  • = (Eşittir)
  • <> veya != (Eşit Değildir)
  • > (Büyüktür)
  • < (Küçüktür)
  • >= (Büyük veya Eşittir)
  • <= (Küçük veya Eşittir)
SELECT MusteriAdi, Sehir
FROM Musteriler
WHERE Ulke = 'Almanya';

Bu sorgu, sadece ülkesi ‘Almanya’ olan müşterileri getirecektir.

Mantıksal Operatörler: AND, OR, NOT

Daha karmaşık filtreleme koşulları oluşturmak için mantıksal operatörler kullanılır:

  • AND: Tüm koşullar doğruysa doğru döner.
  • OR: Koşullardan herhangi biri doğruysa doğru döner.
  • NOT: Koşulu tersine çevirir.
SELECT MusteriAdi, Sehir, Ulke
FROM Musteriler
WHERE Ulke = 'Almanya' AND Sehir = 'Berlin';
SELECT MusteriAdi, Sehir, Ulke
FROM Musteriler
WHERE Ulke = 'Almanya' OR Ulke = 'Fransa';

Desen Eşleştirme: LIKE Operatörü

LIKE operatörü, belirli bir deseni içeren değerleri aramak için kullanılır. Joker karakterler (wildcard characters) ile birlikte kullanılır:

  • %: Sıfır veya daha fazla karakteri temsil eder.
  • _ (alt çizgi): Tek bir karakteri temsil eder.
SELECT MusteriAdi
FROM Musteriler
WHERE MusteriAdi LIKE 'A%'; -- 'A' ile başlayan isimler
SELECT MusteriAdi
FROM Musteriler
WHERE MusteriAdi LIKE '%an%'; -- 'an' içeren isimler

Diğer Faydalı Filtreleme Operatörleri

  • IN: Belirtilen değer listesi içinde olanları seçer.
  • SELECT MusteriAdi, Sehir
    FROM Musteriler
    WHERE Sehir IN ('Berlin', 'Londra', 'Paris');
  • BETWEEN: Belirli bir aralıkta olan değerleri seçer (dahil).
  • SELECT UrunAdi, Fiyat
    FROM Urunler
    WHERE Fiyat BETWEEN 100 AND 500;
  • IS NULL / IS NOT NULL: Sütun değeri boş (NULL) olup olmadığını kontrol eder.
  • SELECT MusteriAdi, Telefon
    FROM Musteriler
    WHERE Telefon IS NULL;

Sonuçları Sıralama: ORDER BY Yan Tümcesi

ORDER BY yan tümcesi, SELECT deyiminden dönen sonuç kümesini belirli bir sütun veya sütunlara göre artan (ASC – varsayılan) veya azalan (DESC) sıraya göre sıralar.

SELECT MusteriAdi, Sehir, Ulke
FROM Musteriler
ORDER BY Ulke ASC, Sehir DESC;

Bu sorgu, önce ülkeye göre artan, ardından aynı ülkedeki şehirleri azalan sıraya göre sıralayacaktır.

Sonuç Sayısını Sınırlandırma: LIMIT / TOP Yan Tümcesi

Büyük veri kümeleriyle çalışırken, tüm sonuçları almak yerine yalnızca ilk birkaç satırı görmek isteyebilirsiniz. Bu amaçla LIMIT (MySQL, PostgreSQL) veya TOP (SQL Server) kullanılır.

-- MySQL/PostgreSQL
SELECT UrunAdi, Fiyat
FROM Urunler
ORDER BY Fiyat DESC
LIMIT 10;
-- SQL Server
SELECT TOP 10 UrunAdi, Fiyat
FROM Urunler
ORDER BY Fiyat DESC;

Her iki sorgu da en pahalı 10 ürünü listeler.

Verileri Gruplama ve Özetleme: GROUP BY ve Aggregate Fonksiyonları

GROUP BY yan tümcesi, aynı değere sahip satırları bir veya daha fazla sütuna göre gruplandırır. Bu, genellikle COUNT(), SUM(), AVG(), MIN(), MAX() gibi aggregate (toplama) fonksiyonlarıyla birlikte kullanılır.

SELECT Ulke, COUNT(MusteriID) AS ToplamMusteri
FROM Musteriler
GROUP BY Ulke
ORDER BY ToplamMusteri DESC;

Bu sorgu, her ülkedeki müşteri sayısını sayar ve en çok müşterisi olan ülkeden başlayarak listeler.

Grupları Filtreleme: HAVING Yan Tümcesi

WHERE yan tümcesi bireysel satırları filtrelerken, HAVING yan tümcesi GROUP BY ile oluşturulan grupları filtrelemek için kullanılır.

SELECT Ulke, COUNT(MusteriID) AS ToplamMusteri
FROM Musteriler
GROUP BY Ulke
HAVING COUNT(MusteriID) > 5;

Bu sorgu, sadece 5’ten fazla müşterisi olan ülkeleri ve müşteri sayılarını listeler.

Birden Fazla Tablodan Veri Sorgulama: JOIN İşlemleri

Veritabanları genellikle ilişkisel yapıdadır ve bilgiler birden fazla tabloda saklanır. JOIN deyimleri, bu tabloları birleştirerek ilgili verileri tek bir sonuç kümesinde almanızı sağlar. Örneğin, INNER JOIN, iki tabloda da eşleşen kayıtlara sahip satırları döndürür.

SELECT M.MusteriAdi, S.SiparisTarihi, S.ToplamTutar
FROM Musteriler M
INNER JOIN Siparisler S ON M.MusteriID = S.MusteriID
WHERE S.SiparisTarihi > '2023-01-01';

Bu örnek, 2023’ten sonra sipariş veren müşterilerin adlarını ve sipariş bilgilerini birleştirerek gösterir.

SELECT deyimi, SQL’in en temel ve en güçlü araçlarından biridir. Basit sorgulardan karmaşık analizlere kadar, veritabanından bilgi çekmenin her aşamasında kritik bir rol oynar. WHERE, ORDER BY, GROUP BY gibi yan tümcelerle birleştiğinde, kullanıcıların spesifik ihtiyaçlarına göre özelleştirilmiş veri kümeleri oluşturma esnekliği sunar. Veri odaklı dünyamızda, bu komutta ustalaşmak, her geliştirici ve analist için paha biçilmez bir beceridir.