SQL NEDİR
SQL, 1974'te IBM araştırmacıları Donald Chamberlin ve Raymond Boyce tarafından geliştirildiğinde tek bir amacı vardı: Veritabanına insan diline yakın bir cümleyle soru sormak. Yarım asır sonra dünyadaki neredeyse her uygulamanın arkasında hâlâ aynı dil çalışıyor. Bu uzun ömrün arkasında ne var?
Bu yazı SQL'in ne olduğunu, neden yaygın olduğunu ve temel komutlarıyla nasıl kullanıldığını somut örneklerle açıklıyor.
SQL Nedir?
SQL (Structured Query Language), ilişkisel veritabanlarıyla iletişim kurmak için kullanılan standart sorgulama dilidir. Veriyi okumak, eklemek, güncellemek, silmek ve veritabanı yapısını oluşturmak için kullanılır. Programlama dili değildir; deklaratif (bildirim temelli) bir dildir. "Şunu istiyorum" denir, "nasıl alacağı" veritabanı motoruna bırakılır.
Bir cümle örneği:
SELECT MusteriAdi FROM Musteriler WHERE Sehir = 'Ankara';
Türkçeye çevrilirse: "Müşteriler tablosundan, şehri Ankara olan kayıtların müşteri adlarını getir." Doğal dile şaşırtıcı ölçüde yakındır. Dilin yapısı ve tarihçesi Wikipedia'nın SQL sayfasında da genel hatlarıyla ele alınır. SQL'in elli yıl ayakta kalmasının bir nedeni de bu.
Dilin komutları işlev gruplarına ayrılır: DQL veri sorgulama (SELECT), DML veri değiştirme (INSERT, UPDATE, DELETE), DDL yapı tanımlama (CREATE, ALTER, DROP), DCL yetkilendirme (GRANT, REVOKE) ve TCL işlem yönetimi (COMMIT, ROLLBACK). Günlük işin büyük kısmı ilk iki grupta döner; diğerleri veritabanı kurulum ve yönetiminde devreye girer.
İlişkisel Veritabanı Nedir?
İlişkisel veritabanı, verinin tablolarda satır ve sütun olarak tutulduğu, tablolar arasındaki bağlantıların anahtar alanlarla kurulduğu yapıdır. Excel sayfası gibi düşünebilirsiniz, ama daha katı kurallar ve daha güçlü ilişki yetenekleriyle.
Tipik bir e-ticaret veritabanında üç tablo şöyle ilişkilenir:
- Musteriler: MusteriID, MusteriAdi, Email, Sehir
- Siparisler: SiparisID, MusteriID, SiparisTarihi, ToplamTutar
- UrunDetayi: SatirID, SiparisID, UrunAdi, Adet, BirimFiyat
Siparisler tablosundaki MusteriID, Musteriler tablosundaki MusteriID ile eşleşir. Böylece bir siparişin hangi müşteriye ait olduğu bilinir. Her tablo kendi sorumluluğunu üstlenir; veri tekrarı azalır, tutarlılık artar. Bu yapıya "normalizasyon" denir.
SELECT — Veri Çekme
SELECT, SQL'in en çok kullanılan komutudur. Temel kalıbı şöyledir:
SELECT <sütunlar> FROM <tablo> WHERE <koşul> ORDER BY <sıralama>;
Tüm sütunları çekmek için * kullanılır ama üretim ortamında önerilmez; gerekli sütunlar tek tek listelenir. Bir örnek:
SELECT MusteriAdi, Email FROM Musteriler WHERE Sehir = 'İstanbul' ORDER BY MusteriAdi ASC;
Bu sorgu İstanbul'daki müşterilerin ad ve e-postalarını alfabetik sırada getirir. ASC artan, DESC azalan sıralamadır.
WHERE — Koşullu Filtre
WHERE, hangi satırların döneceğine karar verir. Karşılaştırma operatörleri:
- = eşit, <> eşit değil
- >, <, >=, <= sayısal ve tarihsel karşılaştırma
- BETWEEN iki değer arası:
WHERE Tutar BETWEEN 100 AND 500 - IN liste içinde:
WHERE Sehir IN ('Ankara','İzmir','Bursa') - LIKE desen eşleştirme:
WHERE Ad LIKE 'A%'(A ile başlayan) - IS NULL / IS NOT NULL boş değer kontrolü
AND, OR ve NOT ile birden çok koşul birleştirilir. Operatör önceliğine dikkat etmek gerekir; karışık sorgularda parantez kullanmak okunabilirliği artırır.

JOIN — Tabloları Birleştirme
İlişkisel veritabanında veri birden çok tabloya dağıldığı için JOIN olmadan iş yapılmaz. Bir müşterinin sipariş listesini almak için iki tabloyu birleştirmek gerekir:
SELECT m.MusteriAdi, s.SiparisTarihi, s.ToplamTutar
FROM Musteriler m
INNER JOIN Siparisler s ON m.MusteriID = s.MusteriID
WHERE m.Sehir = 'Ankara';
Burada m ve s, tablo takma adlarıdır (alias). INNER JOIN sadece iki tarafta eşleşen kayıtları döner. JOIN çeşitleri:
- INNER JOIN: İki tabloda da eşleşen kayıtlar
- LEFT JOIN: Sol tablodaki tüm kayıtlar, sağdaki eşleşmeler (yoksa NULL)
- RIGHT JOIN: Sağ tablodaki tüm kayıtlar, soldaki eşleşmeler
- FULL OUTER JOIN: Her iki tablodaki tüm kayıtlar (Access ve MySQL'in eski sürümleri desteklemez)
"Hangi müşterilerimin hiç siparişi yok?" sorusunun cevabı LEFT JOIN ile alınır: LEFT JOIN Siparisler s ON ... WHERE s.SiparisID IS NULL.
Popüler İlişkisel Veritabanları
SQL standarttır ama her sistem küçük lehçe farkları taşır. En çok kullanılanlar:
- PostgreSQL: Açık kaynak, standartlara en sadık, kurumsal uygulamalarda baskın
- MySQL / MariaDB: Web tabanlı uygulamalarda yaygın, hızlı ve kararlı
- SQL Server: Microsoft ekosistemi, .NET projelerinin doğal seçimi
- Oracle: Büyük kurumsal sistemler, finans ve telekom sektöründe baskın
- SQLite: Tek dosya, sunucusuz; mobil uygulamaların büyük çoğunluğunda gömülü
SQL bilgisi bunlar arasında büyük ölçüde taşınabilir. Bir sistemde öğrenilen %80'lik bilgi diğerinde aynen geçerlidir; geri kalan %20 lehçe farkı (tarih fonksiyonları, otomatik artan ID tanımı, string birleştirme) belgelerden öğrenilir.
Veri Değiştirirken Güvenlik Refleksi
Veri okuyan SELECT zararsızdır; veri değiştiren UPDATE ve DELETE ise tek satırlık dikkatsizlikle tabloyu yok edebilir. Klasik kaza şudur: UPDATE musteri SET sehir = 'İzmir' — WHERE unutulmuştur ve tüm müşterilerin şehri İzmir olur. WHERE'siz DELETE da tablodaki her satırı siler ve yedek dışında geri dönüş yoktur.
Tecrübeli kullanıcıların refleksi iki katmanlıdır: değiştirme komutunu yazmadan önce aynı koşulla bir SELECT çalıştırıp kaç satırın etkileneceğini görmek; kritik tablolarda fiziksel silme yerine is_deleted kolonuyla yumuşak silme (soft delete) kullanmak. Birden çok değişikliği tek pakette çalıştırıp gerekirse geri alabilmek için de transaction (COMMIT/ROLLBACK) devreye girer.
SQL Öğrenmenin Pratik Yolu
SQL teoriyle değil sorguyla öğrenilir. Önce küçük bir örnek veritabanı kurun (Northwind, Sakila, AdventureWorks); 5-10 tablolu, gerçek veriye yakın yapılar. Sonra sorularla başlayın: "Bu ay en çok satış yapan 5 ürün?", "Şehir başına ortalama sipariş tutarı?", "Hiç ürün satın almamış müşteriler?". Her soruyu önce kendiniz yazmaya çalışın, sonra çözüme bakın.
Sistematik öğrenme için SQL eğitimi programı temelden ileri seviyeye giden bir yol haritası sunar. İçinde sorgu örnekleri, performans ipuçları ve gerçek projelerden vakalar yer alır.
SQL Bir Beceri Olarak
SQL, yarım yüzyıldır dayanan ender teknolojilerden biri. Programlama dilleri değişti, framework'ler geldi gitti, veritabanları farklılaştı; sorgulama dili aynı kaldı. Bugün veri analisti, yazılım geliştirici, raporlama uzmanı, ürün yöneticisi — veriyle çalışan hemen herkes için SQL temel bir okuryazarlık. Birkaç ayda öğrenilebilir, ömür boyu değer üretir.
Sıkça Sorulan Sorular
SQL ile MySQL aynı şey midir?
Hayır. SQL bir dildir, MySQL ise SQL'i kullanan bir veritabanı yönetim sistemidir. SQL standart, MySQL bu standardı uygulayan ürünlerden biridir. PostgreSQL, SQL Server, Oracle, SQLite de aynı standardı kullanan farklı ürünlerdir. SQL öğrenmek hepsine kapı açar.
SQL'i öğrenmek ne kadar sürer?
Temel SELECT, WHERE, JOIN ve toplulaştırma fonksiyonlarını kavramak günlük 1 saat çalışmayla 2-3 hafta sürer. Karmaşık sorgular, alt sorgular ve performans optimizasyonunda akıcı olmak 3-6 ay düzenli pratik gerektirir. Veritabanı tasarımı ve indeksleme daha derin bir konu, sürekli öğrenme alanıdır.
Programlama bilmeden SQL öğrenebilir miyim?
Evet. SQL deklaratif bir dildir, döngü ve değişken mantığı içermez. Mantık becerisi ve veri yapılarını kavrama yeteneği yeterlidir. Excel'de pivot tablo kurabilen ve VLOOKUP kullanabilen birisi SQL'e geçişte çok rahat eder. Programcı olmayan birçok analist SQL'i ana aracı olarak kullanır.
INNER JOIN ve LEFT JOIN arasında pratik fark nedir?
INNER JOIN sadece iki tarafta da eşleşme bulunan kayıtları döner. LEFT JOIN sol tablodaki tüm kayıtları döner, sağda eşleşme varsa onu ekler, yoksa NULL bırakır. "Hiç sipariş vermemiş müşteriler" gibi sorularda LEFT JOIN şarttır; INNER JOIN bu kayıtları gizler.
NoSQL ile SQL arasında nasıl seçim yapılır?
İlişkisel veri, tutarlılık ve karmaşık sorgular önemliyse SQL doğru tercih. Yarı yapılandırılmış veri, yüksek yazma hızı, yatay ölçeklenme öncelikse NoSQL (MongoDB, Cassandra, Redis) düşünülür. Modern uygulamalar genellikle her ikisini de farklı amaçlarla birlikte kullanır; biri diğerinin yerini almaz.
Stored procedure ne işe yarar?
Sık tekrarlanan SQL bloklarını veritabanı sunucusunda saklı tutar. Uygulama bir komutla çağırır, sunucu içeride çalıştırır. Avantajları: tek noktadan bakım, ağ trafiği azaltma, güvenlik (uygulama tablolara doğrudan erişmez), performans (önceden derlenmiş plan). Karmaşık iş kuralları için yaygın yaklaşımdır.
SQL'de indeks ne zaman kullanılır?
WHERE veya JOIN'de sık kullanılan sütunlara indeks tanımlanır. Sorgu hızını çarpıcı şekilde artırır. Her sütuna indeks atmak yanlıştır; yazma işlemlerini yavaşlatır ve disk alanı tüketir. Doğru indeks stratejisi, en çok çalışan 10-20 sorgu üzerinden EXPLAIN ile analiz edilerek kurulur.
WHERE'siz UPDATE veya DELETE çalıştırırsam ne olur?
Komut tablodaki TÜM satırlara uygulanır: WHERE'siz UPDATE her kaydı değiştirir, WHERE'siz DELETE her kaydı siler ve yedek dışında geri dönüş yoktur. Güvenli pratik, değiştirme komutundan önce aynı koşulla SELECT çalıştırıp etkilenecek satır sayısını görmek ve kritik işlemleri transaction içinde yapıp gerekirse ROLLBACK ile geri almaktır.



