1. Haberler
  2. Programlama
  3. Temelden İleri Seviyeye SQL Sorgu Örnekleri

Temelden İleri Seviyeye SQL Sorgu Örnekleri

Müşteri ve satış veritabanı tabloları ile SQL sorgusunu temel ve ileri düzey 30' dan fazla örnekle öğrenin, pratik yaparak SQL bilginizi geliştirin.

featured
service
Paylaş

Bu Yazıyı Paylaş

veya linki kopyala

Bu rehberde, SQL dilini öğrenmek veya geliştirmek isteyen herkes için Müşteri veritabanı üzerinden örneklerle açıklanmış 30′ dan fazla SQL sorgusunu bulacaksınız. Temel seçme işlemlerinden alt sorgulara, toplu işlemlerden güncelleme ve silmeye kadar birçok farklı başlık altında SQL pratiği yapabilirsiniz.

İçindekiler

🎯 SQL Nedir? Ne İşe Yarar?

SQL (Structured Query Language), ilişkisel veritabanlarında veri oluşturmak, okumak, güncellemek ve silmek (CRUD işlemleri) için kullanılan standart bir programlama dilidir. Modern veri analizinden raporlamaya kadar birçok alanda temel araçtır.

SQL, veriyi anlamak ve işlemek isteyen herkes için vazgeçilmez bir beceridir.

📌 SQL Sorgusu (Query) Nedir?

SQL sorgusu, veritabanına gönderdiğimiz bir istektir. Bu istek ile veriyi:

  • Alabiliriz (SELECT)
  • Güncelleyebiliriz (UPDATE)
  • Ekleyebiliriz (INSERT)
  • Silebiliriz (DELETE)

📘 Bu Rehberde Neler Öğreneceksiniz?

✅ 40’tan fazla gerçek SQL sorgusu örneği
✅ Temel SQL sözdizimi
✅ Veri alma (SELECT), filtreleme, sıralama, gruplama
✅ Birden fazla tabloyu birleştirme (JOIN)
✅ Alt sorgular (Subqueries), koşullu mantık (CASE)
✅ Gelişmiş analiz (Window Fonksiyonları)

Her sorgu için gerçek dünya örnekleri sunulmuştur. Hedefimiz: SQL’i öğrenmekten öte, uygulayabilmenizi sağlamak!

🧠 Neden SQL Öğrenmeliyim?

  • 👨‍💻 Veri bilimi ve analizinde temel dil
  • 📊 Raporlama ve dashboard oluşturma yetenekleri kazandırır
  • 🧩 Veriler arasında ilişkileri çözmenizi sağlar
  • 💼 Her sektörde geçerli bir beceridir (web programlama, e-ticaret, finans, eğitim…)

🔍 Temel SQL Sorguları

1- CREATE TABLE ile Yeni Tablo Oluşturma

Yeni bir tablo oluşturmak için CREATE TABLE sorgusu kullanılır. Aşağıda “Musteriler” isimli bir tablo oluşturduk. Bu tablo Musteri ID, Ad, Soyad, Sehir, Email, KayıtTarihi ve Aktif isimli sütunlar içerecektir. Rehberimizdeki tüm örnekleri de bu tablo üzerinden vereceğiz.

CREATE TABLE Musteriler_Satisli (
    MusteriID INT PRIMARY KEY,
    Ad VARCHAR(50),
    Soyad VARCHAR(50),
    Sehir VARCHAR(50),
    Satis DECIMAL(10,2),
    KayitTarihi DATE,
    Aktif BOOLEAN
);

2- INSERT INTO ile Tabloya Veri (Kayıt) Ekleme

INSERT INTO ifadesi, SQL’de yeni veri (kayıt) eklemek için kullanılır. Yani, bir tabloya yeni satırlar eklememizi sağlar. INSERT INTO komutu, veri ekler ama güncellemez. Güncelleme için UPDATE kullanılır.

Birden fazla kayıt eklemek istersen, VALUES kısmına birden fazla parantez açarak yazabilirsiniz.

INSERT INTO Musteriler_Satisli (MusteriID, Ad, Soyad, Sehir, Satis, KayitTarihi, Aktif) VALUES
(1, 'Ayşe', 'Yılmaz', 'İstanbul', 1500.00, '2021-01-15', TRUE),
(2, 'Mehmet', 'Demir', 'Ankara', 2750.50, '2021-11-30', FALSE),
(3, 'Elif', 'Kaya', 'İzmir', 3200.00, '2022-02-20', TRUE),
(4, 'Ahmet', 'Çelik', 'Bursa', 1980.00, '2022-06-05', TRUE),
(5, 'Zeynep', 'Şahin', 'Antalya', 2550.75, '2022-09-10', FALSE),
(6, 'Murat', 'Aydın', 'Konya', 3100.00, '2024-04-01', TRUE),
(7, 'Fatma', 'Koç', 'Eskişehir', 1450.90, '2024-07-25', TRUE),
(8, 'Emre', 'Polat', 'Samsun', 2800.00, '2024-12-12', FALSE),
(9, 'Derya', 'Arslan', 'Adana', 2300.50, '2025-03-03', TRUE),
(10, 'Hasan', 'Yavuz', 'Kayseri', 2950.00, '2025-05-18', TRUE);

🧾 Oluşan Musteriler Tablosu

Yukarıdaki sorgu komutları sonucunda oluşan tablo şu şekilde olacaktır:

MusteriIDAdSoyadSehirSatisKayitTarihiAktif
1AyşeYılmazİstanbul1500.002021-01-15TRUE
2MehmetDemirAnkara2750.502021-11-30FALSE
3ElifKayaİzmir3200.002022-02-20TRUE
4AhmetÇelikBursa1980.002022-06-05TRUE
5ZeynepŞahinAntalya2550.752022-09-10FALSE
6MuratAydınKonya3100.002024-04-01TRUE
7FatmaKoçEskişehir1450.902024-07-25TRUE
8EmrePolatSamsun2800.002024-12-12FALSE
9DeryaArslanAdana2300.502025-03-03TRUE
10HasanYavuzKayseri2950.002025-05-18TRUE

🔹 SELECT ile Veri Okuma ve Listeleme

SQL’ de bir tablodan veri çekmek için kullanılan komut, SELECT komutudur.

1. Tüm müşteri kayıtlarını listele:

SELECT * FROM Musteriler;

SQL’de * (yıldız işareti), “tüm sütunları” temsil eder.

2. Sadece müşteri adlarını ve soyadlarını göster:

SELECT Ad, Soyad FROM Musteriler;

3. Ankara şehrindeki müşterileri getir:

SELECT * FROM Musteriler WHERE Sehir = 'Ankara';

4. Aktif müşterileri göster:

SELECT * FROM Musteriler WHERE Aktif = TRUE;

5. Kayıt tarihi 2023’ten sonra olan müşteriler:

SELECT * FROM Musteriler WHERE KayitTarihi > '2023-01-01';

🔹 Sıralama ve Filtreleme

6. Müşterileri ada göre alfabetik sırala:

SELECT * FROM Musteriler ORDER BY Ad ASC;

Ad sütunundaki isimleri A’ dan Z’ ye doğru sırayla listeler. DESC ile Z’ den A’ ya sıralanabilir.

7. En yeni kayıt olan ilk 5 müşteriyi listele:

SELECT * FROM Musteriler ORDER BY KayitTarihi DESC LIMIT 5;

Eğer SQL Server kullanıyorsanız LIMIT ifadesi desteklenmez. Onun yerine TOP ve ORDER BY ifadeleri kullanılır.

SELECT TOP 5 * 
FROM Musteriler 
ORDER BY KayitTarihi DESC;

8. Müşteri adında hem “a” hem de “e” geçenleri listele:

SELECT * FROM Musteriler
WHERE Ad LIKE '%a%' AND Ad LIKE '%e%';

9. Bugün kayıt olan müşteriler:

SELECT * FROM Musteriler WHERE KayitTarihi = CURRENT_DATE;

10. 2024 Yılında kayıt olan müşteriler:

SELECT *
FROM Musteriler
WHERE KayitTarihi BETWEEN '2024-01-01' AND '2024-12-31';

11. Sadece ilk harfi büyük ad ve soyadları göster:

SELECT INITCAP(Ad) AS Ad, INITCAP(Soyad) AS Soyad FROM Musteriler;

🔹 Fonksiyonlar ve Toplu İşlemler

12. Toplam müşteri sayısını öğren:

SELECT COUNT(*) AS ToplamMusteri FROM Musteriler;

13. Her şehirdeki müşteri sayısı:

SELECT Sehir, COUNT(*) AS MusteriSayisi
FROM Musteriler
GROUP BY Sehir;

14. Aktif ve pasif müşteri sayılarını göster:

SELECT Aktif, COUNT(*) AS Sayisi
FROM Musteriler
GROUP BY Aktif;

15. Toplam satış tutarını hesapla:

SELECT 
    SUM(Satis) AS ToplamSatis,
FROM Musteriler
WHERE Satis IS NOT NULL;

16. Ortalama Satış Tutarını Hesapla:

SELECT 
    AVG(Satis) AS OrtalamaSatis,
FROM Musteriler
WHERE Satis IS NOT NULL;

17. En Düşük Satış Tutarını Göster:

SELECT 
    MIN(Satis) AS EnDusukSatis
FROM Musteriler
WHERE Satis IS NOT NULL;

18. En Yüksek Satış Tutarını Göster:

SELECT 
    MAX(Satis) AS EnYuksekSatis,
FROM Musteriler
WHERE Satis IS NOT NULL;

19. GROUP BY ve HAVING

GROUP BY: Verileri belirli bir sütuna göre gruplamak için kullanılır. Genellikle COUNT, SUM, AVG, MAX, MIN gibi fonksiyonlarla birlikte kullanılır.

HAVING: GROUP BY ile oluşturulan gruplar üzerinde filtreleme yapmak için kullanılır. WHERE koşulu satırları filtrelerken, HAVING grupları filtreler.

SELECT Sehir, AVG(Satis) AS OrtalamaSatis
FROM Musteriler
GROUP BY Sehir
HAVING AVG(Satis) > 2000;

Her şehirdeki müşterilerin ortalama satışlarını hesaplar ve ortalaması yalnızca 2000’den fazla olan şehirleri listeler.

🔹 Gelişmiş Sorgular

20. İsmi “Ali” ile başlayan müşteriler:

SELECT * FROM Musteriler WHERE Ad LIKE 'Ali%';

21. Email bilgisi eksik olan müşteriler:

SELECT * FROM Musteriler WHERE Email IS NULL;

22. “istanbul” veya “izmir” şehirlerinden müşteriler:

SELECT * FROM Musteriler WHERE Sehir IN ('Istanbul', 'Izmir');

🔹 Alt Sorgular ve JOIN

23. En erken kayıt olan müşteriyi getir:

SELECT * FROM Musteriler
WHERE KayitTarihi = (SELECT MIN(KayitTarihi) FROM Musteriler);

🔹 Güncelleme ve Silme

24. Ankara’daki tüm müşterileri pasif yap:

UPDATE Musteriler SET Aktif = FALSE WHERE Sehir = 'Ankara';

25. Email bilgisi olmayan müşterileri sil:

DELETE FROM Musteriler WHERE Email IS NULL;

🔹 Yeni Sütun ve Veri Ekleme

26. Yeni Sütun Ekleme

ALTER TABLE Musteriler
ADD Iletisim VARCHAR(100);
  • Iletisim: Eklenen yeni sütunun adı.
  • VARCHAR(100): Maksimum 100 karakterlik metin tutar (telefon numarası, WhatsApp, Instagram vb. bilgiler için uygundur).

27. Yeni Sütuna Veri Ekleme

UPDATE Musteriler SET Iletisim = '0599 111 1122' WHERE MusteriID = 1;
UPDATE Musteriler SET Iletisim = 'mehmet.demir@example.com' WHERE MusteriID = 2;
UPDATE Musteriler SET Iletisim = '0955 333 3344' WHERE MusteriID = 3;
-- diğerlerini de isteğe göre doldurabilirsiniz

Yeni eklenen sütun ve verilerden sonra tablonun son görünümü şu şekilde olacaktır:

MusteriIDAdSoyadSehirSatisKayitTarihiAktifIletisim
1AyşeYılmazİstanbul1500.002021-01-15TRUE0599 111 1122
2MehmetDemirAnkara2750.502021-11-30FALSEmehmet.demir@example.com
3ElifKayaİzmir3200.002022-02-20TRUE0955 333 3344
4AhmetÇelikBursa1980.002022-06-05TRUENULL
5ZeynepŞahinAntalya2550.752022-09-10FALSENULL
6MuratAydınKonya3100.002024-04-01TRUENULL
7FatmaKoçEskişehir1450.902024-07-25TRUENULL
8EmrePolatSamsun2800.002024-12-12FALSENULL
9DeryaArslanAdana2300.502025-03-03TRUENULL
10HasanYavuzKayseri2950.002025-05-18TRUENULL

🔹 Başka Tablolarla İlişkilendirme

Varsayalım ki elimizde Musteriler tablosundan başka Sehirler, Siparisler ve Departmanlar gibi ek tablolarımız olsun.

Farklı tablolarla ilişkilendirmelerde “Alias” denilen takma adlar kullanılır. Örneğin;

  • m.Ad → “Musteriler tablosundaki Ad sütunu” anlamına gelir.
  • mMusteriler tablosuna verilen takma addır (alias).
  • AdMusteriler tablosundaki sütun adıdır.

Alias kullanmadan da sorgulamalar yapmak mümkündür ancak daha uzun ve karmaşık olur. Örneğin; aşağıdaki sorguların ikisi de şu anlama gelir ve doğrudur:

Musteriler tablosundaki Ad ile Sehirler tablosundaki SehirAdi bilgilerini getir.

SELECT m.Ad, s.SehirAdi
SELECT Musteriler.Ad, Sehirler.SehirAdi

28. Farklı Tablolara ait Sütunları Eşleştirme:

SELECT m.Ad, s.SehirAdi
FROM Musteriler m
INNER JOIN Sehirler s ON m.Sehir = s.SehirKodu;

Musteriler tablosundaki Sehir sütunu, Sehirler tablosundaki SehirKodu ile eşleşiyor.

29. Siparişi Olan ve Olmayan Tüm Müşteriler:

SELECT m.Ad, s.SiparisID
FROM Musteriler m
LEFT JOIN Siparisler s ON m.MusteriID = s.MusteriID;

30. Siparişi olan müşteriler ve eşleşen müşteri bilgileri

SELECT m.Ad, s.SiparisID
FROM Musteriler m
RIGHT JOIN Siparisler s ON m.MusteriID = s.MusteriID;

Sadece siparişi olanlar listelenir, ancak eşleşmeyen müşteriler null çıkar.

31. Müşteri ve Tavsiye Eden Müşteri

Varsayalım ki her müşteri başka bir müşteri tarafından tavsiye edilebiliyor (TavsiyeEdenID sütunu var).

SELECT m1.Ad AS Musteri, m2.Ad AS TavsiyeEden
FROM Musteriler m1
JOIN Musteriler m2 ON m1.TavsiyeEdenID = m2.MusteriID;

32. Satış Miktarına Göre Kategori

SELECT Ad,
       CASE 
         WHEN Satis > 5000 THEN 'Yüksek'
         WHEN Satis BETWEEN 2000 AND 5000 THEN 'Orta'
         ELSE 'Düşük'
       END AS SatisSeviyesi
FROM Musteriler;

33. Belirli Şehirden Gelen Müşteriler

SELECT *
FROM Musteriler
WHERE Sehir = (
    SELECT SehirKodu FROM Sehirler WHERE SehirAdi = 'İstanbul');

34. Şehre Göre Satış Sıralaması

SELECT Ad, Sehir, Satis,
       RANK() OVER (PARTITION BY Sehir ORDER BY Satis DESC) AS SehirIciSira
FROM Musteriler;

Her şehirdeki müşterileri, satış miktarına göre sıralar.

Bu içeriğimize tepkiniz ne oldu?
+1
4
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
Temelden İleri Seviyeye SQL Sorgu Örnekleri
Yorum Yap

Bültenimize Abone Olabilirsin

Yeni içeriklerden haberdar olmak için ücretsiz e-posta aboneliğini hemen başlat.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Giriş Yap

Bilişim Teknolojileri ve Yazılım Sitesi : Bilişimle Gelecek! ayrıcalıklarından yararlanmak için hemen giriş yapın veya hesap oluşturun, üstelik tamamen ücretsiz!

Uygulamayı Yükle

Uygulamamızı yükleyerek içeriklerimize daha hızlı ve kolay erişim sağlayabilirsiniz.

Bizi Takip Edin