İlk SQL sorgumu yazdığımda karşımda koskoca bir veritabanı vardı ve nereden başlayacağımı bilmiyordum. Müşteri siparişlerini listelemek için yazdığım sorgu 5 dakika çalıştı ve sonuçta 10 bin satır döndü. O an anladım ki SQL sadece komut bilmek değil, veriyi anlamakla ilgili. SQL öğrenmek isteyenler için en büyük tuzak: hemen karmaşık sorgulara atlamak. Oysa temel yapı taşlarını doğru kurarsanız gerisi geliyor.
İlk SQL sorgunuzu yazmak sandığınızdan kolay: Adım adım anlatım

SQL sorgusu yazmak için önce veritabanı yapısını anlayın, SELECT ile başlayın, WHERE ile filtreleyin, JOIN ile tabloları birleştirin. Pratik yapmak için SQL fiddle gibi online araçları kullanın.
"İlk işimde bir e-ticaret veritabanına sorgu yazıyordum. 'En çok satan ürünler' listesi istediler. WHERE, GROUP BY, HAVING derken sorgu 3 sayfa oldu. Çalıştırdım, 45 saniye sürdü. Sonra abim 'önce indexleri kontrol et' dedi. Meğer tabloda index yokmuş. O günden beri sorgu yazmadan önce veritabanı şemasını ve indexleri kontrol ederim."
SQL öğrenmeye çalışanların çoğu, teorik bilgilerle pratik arasında kopukluk yaşıyor. Online derslerde gördüğünüz 'SELECT * FROM employees' gibi basit örnekler işe yaramıyor çünkü gerçek hayatta tablolar birbirine bağlı, veri kirli ve sorguların hızlı çalışması gerekiyor. Standart öğrenme yöntemleri size JOIN'i öğretir ama hangi JOIN'i ne zaman kullanacağınızı söylemez. İşte bu yüzden çoğu kişi SQL'i 'zor' olarak nitelendiriyor.
🔧 5 Çözümler
Bu yöntemle veritabanından istediğiniz sütunları seçip satırları filtrelemeyi öğreneceksiniz.
-
1
Veritabanına bağlanın — MySQL Workbench, pgAdmin veya SQLite Browser gibi bir araç açın. Örnek bir veritabanına bağlanın (örneğin Sakila veritabanı).
-
2
SELECT ile sütunları seçin — 'SELECT first_name, last_name FROM customer' yazın. Tüm sütunlar için '*' kullanabilirsiniz ama performans için sadece ihtiyacınız olanları seçin.
-
3
WHERE ile satırları filtreleyin — 'WHERE first_name = 'MARY'' ekleyerek sadece Mary adlı müşterileri getirin. Metin değerlerini tek tırnak içine alın.
-
4
ORDER BY ile sıralayın — Sonuçları sıralamak için 'ORDER BY last_name ASC' ekleyin. ASC artan, DESC azalan sıralar.
-
5
LIMIT ile sonuç sayısını sınırlayın — Çok fazla satır gelmesini önlemek için sorgunun sonuna 'LIMIT 10' ekleyin. Böylece ilk 10 satırı görürsünüz.
-
6
Sorguyu çalıştırın ve sonucu inceleyin — Çalıştır butonuna tıklayın. Gelen sonuçları kontrol edin. Beklediğiniz gibi değilse WHERE koşulunu düzeltin.
Bu yöntemle birden fazla tablodaki verileri nasıl birleştireceğinizi öğreneceksiniz.
-
1
İlişkili tabloları belirleyin — Örneğin 'customer' ve 'address' tabloları. Müşterinin adresini görmek için bu tabloları birleştirmelisiniz.
-
2
INNER JOIN ile eşleşen kayıtları getirin — 'SELECT c.first_name, a.address FROM customer c INNER JOIN address a ON c.address_id = a.address_id' yazın. Sadece eşleşen kayıtlar gelir.
-
3
LEFT JOIN ile tüm kayıtları koruyun — Eğer tüm müşterileri görmek istiyorsanız (adresi olmasa bile) LEFT JOIN kullanın. 'FROM customer c LEFT JOIN address a ON ...'
-
4
Takma ad (alias) kullanın — Tablo adlarına kısa isimler verin: 'customer c', 'address a'. Bu sorguyu okunabilir kılar.
-
5
WHERE ile birleştirilmiş veriyi filtreleyin — Sadece belirli bir şehirdeki müşterileri görmek için 'WHERE a.city = 'London'' ekleyin.
-
6
Sorguyu test edin ve hata ayıklayın — Birleştirme koşulunu kontrol edin. Eğer yanlış sütun adı kullanırsanız hata alırsınız. Önce küçük bir örnekle test edin.
Bu yöntemle verileri gruplayıp toplam, ortalama gibi özet bilgiler elde edeceksiniz.
-
1
Gruplamak istediğiniz sütunu belirleyin — Örneğin 'country' sütununa göre müşteri sayısını bulmak istiyorsunuz.
-
2
GROUP BY ile gruplayın — 'SELECT country, COUNT(*) FROM customer GROUP BY country' yazın. Bu her ülkedeki müşteri sayısını verir.
-
3
HAVING ile grupları filtreleyin — Sadece 10'dan fazla müşterisi olan ülkeleri görmek için 'HAVING COUNT(*) > 10' ekleyin. WHERE satırları filtreler, HAVING grupları.
-
4
SUM, AVG gibi fonksiyonları kullanın — Toplam satış miktarı için 'SUM(amount)', ortalama için 'AVG(amount)' kullanın. Örneğin 'SELECT customer_id, SUM(amount) FROM payment GROUP BY customer_id'
-
5
ORDER BY ile sıralayın — En çok harcama yapan müşteriyi bulmak için 'ORDER BY SUM(amount) DESC' ekleyin ve LIMIT 1 ile sınırlayın.
-
6
Birden çok sütuna göre gruplayın — Örneğin 'GROUP BY country, city' ile her şehirdeki müşteri sayısını bulabilirsiniz.
Bu yöntemle bir sorgunun sonucunu başka bir sorguda kullanarak daha karmaşık soruları cevaplayacaksınız.
-
1
Alt sorgunun ne döndüreceğini belirleyin — Örneğin, en yüksek ödeme yapan müşterinin ID'sini bulmak için 'SELECT MAX(amount) FROM payment' yazın.
-
2
Alt sorguyu WHERE içinde kullanın — 'SELECT * FROM customer WHERE customer_id = (SELECT customer_id FROM payment WHERE amount = (SELECT MAX(amount) FROM payment))' Bu sorgu en yüksek ödemeyi yapan müşteriyi getirir.
-
3
IN operatörü ile birden çok değer kullanın — Eğer alt sorgu birden çok satır döndürüyorsa '=' yerine 'IN' kullanın. Örneğin: 'SELECT * FROM customer WHERE customer_id IN (SELECT customer_id FROM payment WHERE amount > 10)'
-
4
EXISTS ile varlık kontrolü yapın — Hiç ödeme yapmamış müşterileri bulmak için 'SELECT * FROM customer c WHERE NOT EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id)'
-
5
Alt sorguyu FROM içinde kullanın — Alt sorguyu bir tablo gibi kullanabilirsiniz: 'SELECT * FROM (SELECT customer_id, SUM(amount) as total FROM payment GROUP BY customer_id) AS sub WHERE total > 100'
-
6
Performansı kontrol edin — Alt sorgular bazen yavaş olabilir. Mümkünse JOIN ile aynı sonucu almayı deneyin. Alt sorgu yerine JOIN kullanmak genelde daha hızlıdır.
Bu yöntemle sorgularınızı hızlandırmak için indekslerin nasıl kullanılacağını öğreneceksiniz.
-
1
Yavaş çalışan bir sorgu bulun — EXPLAIN komutunu sorgunun başına ekleyerek sorgu planını görün. 'EXPLAIN SELECT * FROM payment WHERE amount > 10'
-
2
İndekslenmemiş sütunları tespit edin — EXPLAIN çıktısında 'type: ALL' görüyorsanız full table scan yapılıyor demektir. Bu sütuna indeks eklemelisiniz.
-
3
İndeks oluşturun — 'CREATE INDEX idx_amount ON payment(amount)' komutuyla amount sütununa indeks ekleyin. İndeks adı anlamlı olsun.
-
4
Sorguyu tekrar çalıştırın — EXPLAIN ile sorgu planını kontrol edin. 'type: ref' veya 'range' görmelisiniz. Süredeki iyileşmeyi gözlemleyin.
-
5
Birleşik indeksler oluşturun — Birden çok sütunu filtreliyorsanız 'CREATE INDEX idx_customer_amount ON payment(customer_id, amount)' gibi birleşik indeks kullanın.
-
6
Gereksiz indeksleri silin — Çok fazla indeks yazma performansını düşürebilir. Kullanılmayan indeksleri 'DROP INDEX idx_name' ile silin.
Eğer sorgularınız sürekli yavaş çalışıyor ve nedenini bulamıyorsanız, veritabanı yöneticinizden veya deneyimli bir SQL geliştiricisinden yardım isteyin. Ayrıca, sorgu yazarken veri kaybı riski varsa (DELETE veya UPDATE sorguları) mutlaka bir uzmana danışın. SQL öğrenme sürecinde takıldığınızda Stack Overflow gibi platformlarda soru sormaktan çekinmeyin.
SQL sorgusu yazmak, doğru adımları izlediğinizde sandığınız kadar zor değil. Önce temelleri sağlam atın: SELECT, WHERE, JOIN. Sonra GROUP BY ve alt sorgulara geçin. Her yeni konsepti küçük örneklerle deneyin. Unutmayın, hata yapmak öğrenmenin bir parçası. Sorgunuz çalışmazsa panik yapmayın, adım adım kontrol edin. Zamanla sorgularınızı daha hızlı ve doğru yazacaksınız.
💬 Deneyimini Paylaş
Deneyimini paylaş — aynı durumla karşılaşanlara yardımcı olur!