💻 Teknoloji

İlk SQL sorgunuzu yazmak sandığınızdan kolay: Adım adım anlatım

📅 7 dk okuma ✍️ SolveItHow Editorial Team
İlk SQL sorgunuzu yazmak sandığınızdan kolay: Adım adım anlatım
Hızlı Cevap

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.

Kişisel Deneyim
Veritabanı danışmanı

"İ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."

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

🔍 Bu Neden Olur

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

1
SELECT ve WHERE ile temel sorgu yazma
🟢 Easy ⏱ 10 dakika

Bu yöntemle veritabanından istediğiniz sütunları seçip satırları filtrelemeyi öğreneceksiniz.

  1. 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. 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. 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. 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. 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. 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.
💡 Sorgunuzu yazarken her adımda parça parça test edin. Önce SELECT, sonra WHERE ekleyin, sonra ORDER BY. Böylece hata yaparsanız nerede olduğunu kolay bulursunuz.
Önerilen Ürün
SQL Practice Book: 100+ Exercises
Bu neden işe yarar: Bu kitapla birlikte gelen alıştırmalar sayesinde temel sorguları pratik yaparak öğrenebilirsiniz.
Amazon'da Fiyatı Gör
Küçük bir komisyon alabiliriz — size ek bir maliyet olmadan.
2
JOIN ile tabloları birleştirme
🟡 Medium ⏱ 20 dakika

Bu yöntemle birden fazla tablodaki verileri nasıl birleştireceğinizi öğreneceksiniz.

  1. 1
    İlişkili tabloları belirleyin — Örneğin 'customer' ve 'address' tabloları. Müşterinin adresini görmek için bu tabloları birleştirmelisiniz.
  2. 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. 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. 4
    Takma ad (alias) kullanın — Tablo adlarına kısa isimler verin: 'customer c', 'address a'. Bu sorguyu okunabilir kılar.
  5. 5
    WHERE ile birleştirilmiş veriyi filtreleyin — Sadece belirli bir şehirdeki müşterileri görmek için 'WHERE a.city = 'London'' ekleyin.
  6. 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.
💡 JOIN yazarken önce hangi tabloların hangi sütunla bağlandığını bir kağıda çizin. Görselleştirmek hata yapma olasılığını azaltır.
Önerilen Ürün
Logitech M720 Triathlon Multi-Device Mouse
Bu neden işe yarar: Bu fare ile birden fazla bilgisayar arasında geçiş yaparak SQL sorgularınızı farklı ortamlarda test edebilirsiniz.
Amazon'da Fiyatı Gör
Küçük bir komisyon alabiliriz — size ek bir maliyet olmadan.
3
GROUP BY ile verileri gruplama ve özetleme
🟡 Medium ⏱ 15 dakika

Bu yöntemle verileri gruplayıp toplam, ortalama gibi özet bilgiler elde edeceksiniz.

  1. 1
    Gruplamak istediğiniz sütunu belirleyin — Örneğin 'country' sütununa göre müşteri sayısını bulmak istiyorsunuz.
  2. 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. 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. 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. 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. 6
    Birden çok sütuna göre gruplayın — Örneğin 'GROUP BY country, city' ile her şehirdeki müşteri sayısını bulabilirsiniz.
💡 GROUP BY kullanırken SELECT'te gruplama yapılmayan sütunların ya aggregate fonksiyon içinde olması ya da GROUP BY'a eklenmesi gerekir. Yoksa hata alırsınız.
Önerilen Ürün
Bose QuietComfort 35 II Kabelloses Bluetooth Noise Cancelling Headset
Bu neden işe yarar: Sessiz bir ortamda SQL sorgularına odaklanmak için gürültü önleyici kulaklık idealdir.
Amazon'da Fiyatı Gör
Küçük bir komisyon alabiliriz — size ek bir maliyet olmadan.
4
Alt sorgular (subquery) ile karmaşık filtreleme
🔴 Advanced ⏱ 25 dakika

Bu yöntemle bir sorgunun sonucunu başka bir sorguda kullanarak daha karmaşık soruları cevaplayacaksınız.

  1. 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. 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. 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. 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. 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. 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.
💡 Alt sorguları yazarken önce içteki sorguyu tek başına çalıştırın ve doğru çalıştığından emin olun. Sonra dış sorguya ekleyin.
Önerilen Ürün
Dell UltraSharp U2720Q 27 Zoll 4K UHD Monitor
Bu neden işe yarar: Geniş ekranda sorguları ve sonuçları aynı anda görmek, hata ayıklamayı kolaylaştırır.
Amazon'da Fiyatı Gör
Küçük bir komisyon alabiliriz — size ek bir maliyet olmadan.
5
İndekslerle sorgu performansını artırma
🔴 Advanced ⏱ 30 dakika

Bu yöntemle sorgularınızı hızlandırmak için indekslerin nasıl kullanılacağını öğreneceksiniz.

  1. 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. 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. 3
    İndeks oluşturun — 'CREATE INDEX idx_amount ON payment(amount)' komutuyla amount sütununa indeks ekleyin. İndeks adı anlamlı olsun.
  4. 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. 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. 6
    Gereksiz indeksleri silin — Çok fazla indeks yazma performansını düşürebilir. Kullanılmayan indeksleri 'DROP INDEX idx_name' ile silin.
💡 İndeks eklemeden önce sorgunun hangi sütunlarda filtreleme yaptığını belirleyin. WHERE, JOIN ve ORDER BY'de kullanılan sütunlar indeks için adaydır.
Önerilen Ürün
SanDisk 1TB Extreme Portable SSD
Bu neden işe yarar: Hızlı bir SSD ile veritabanı yedeklerinizi ve büyük sorgu sonuçlarınızı hızlıca kaydedebilirsiniz.
Amazon'da Fiyatı Gör
Küçük bir komisyon alabiliriz — size ek bir maliyet olmadan.
⚠️ Ne Zaman Profesyonel Yardım Alınmalı

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.

❓ Sık Sorulan Sorular

Öncelikle veritabanı yapısını anlayın. Hangi tablolar var, hangi sütunlar var, ilişkiler nasıl? Sonra en basit sorgu olan SELECT ile başlayın. Online bir SQL eğitimi alabilir veya kendi bilgisayarınıza bir veritabanı kurup deneyebilirsiniz.
JOIN iki veya daha fazla tabloyu birleştirerek tek bir sonuç kümesi oluşturur. Alt sorgu ise bir sorgunun içinde başka bir sorgu kullanmanıza olanak tanır. Genelde JOIN daha hızlı çalışır, ancak alt sorgu bazı durumlarda daha okunabilir olabilir.
Öncelikle EXPLAIN komutuyla sorgu planını inceleyin. Full table scan görüyorsanız, ilgili sütunlara indeks ekleyin. Gereksiz sütunları SELECT'ten çıkarın, JOIN'leri optimize edin. Ayrıca veritabanı sunucusunun kaynaklarını kontrol edin.
En yaygın hatalar: yanlış sütun adı kullanmak, tek tırnak unutmak, GROUP BY olmadan aggregate fonksiyon kullanmak, JOIN koşulunu yanlış yazmak, NULL değerleriyle karşılaştırma yaparken '=' yerine 'IS NULL' kullanmamak.
Ücretsiz olarak W3Schools'un SQL bölümü ve SQLZoo sitesi interaktif alıştırmalar sunar. Kitap olarak 'SQL in 10 Minutes a Day' iyi bir başlangıçtır. Ayrıca Udemy'de 'The Complete SQL Bootcamp' kursunu önerebilirim.