SQL Formatla

Güzelleştir ve SQL sorgularını formatla. Birden fazla lehçe. Ücretsiz, sonsuza kadar.
SQL Lehçesi
Giriş SQL
Formatlanmış SQL
Giriş SQL

Özel ve güvenli

Her şey tarayıcınızda gerçekleşir. Dosyalarınız sunucularımıza asla dokunmaz.

Çok hızlı

Yükleme yok, bekleme yok. Bir dosyayı bıraktığınız anda dönüştürün.

Gerçekten ücretsiz

Hesap gerekmez. Gizli maliyet yok. Dosya boyutu hilesi yok.

SQL (Structured Query Language), gezegendeki neredeyse her ciddi ilişkisel veritabanı tarafından konuşulan ortak dildir— PostgreSQL, MySQLve SQLite 'den SQL Server ve Oracle gibi ticari sistemlere kadar. Veri yapılarını tanımlamanıza, veri saklamanıza, verimli bir şekilde sorgulamanıza ve bu verilerin nasıl davrandığına dair kuralları uygulamanıza olanak tanır.

Aşağıda SQL'in derinlemesine, yaklaşık 2.500 kelimelik bir turu var: ne olduğu, nasıl çalıştığı ve gerçek sistemlerde nasıl iyi kullanılacağı.

1. SQL Nedir (ve Neden Hala Önemli)

SQL bildirimsel bir dildir: ne veri istediğinizi açıklarsınız ve veritabanı nasıl alacağına karar verir. W3Schools'daki SQL kılavuzu ve W3Schools.in SQL serisi gibi öğreticiler SQL'i birçok veritabanı motoru arasında veri saklama, manipüle etme ve alma için standart bir dil olarak tanıtır.

SQL standartlaştırılmış ve yaygın olarak desteklendiği için, aynı zihinsel modeli şunlarda kullanabilirsiniz:

  • MySQL veya PostgreSQL üzerindeki web uygulamaları
  • SQLite kullanan gömülü uygulamalar
  • SQL Server veya Oracle gibi kurumsal sistemler

Günlük iş verilerinin çoğu—siparişler, kullanıcılar, ödemeler, loglar, analitik—sonuçta SQL ile sorgulayabileceğiniz tablolarda saklanır.

2. SQL Standartları ve Lehçeler

SQL, ISO/IEC 9075 standart ailesi tarafından standartlaştırılmıştır ve bu standartlar çekirdek dili ve birçok isteğe bağlı uzantıyı tanımlar. Standart SQL-86, SQL-92, SQL:1999, SQL:2003 ve SQL:2023'e kadar sürümler aracılığıyla evrimleşmiştir. ANSI'nin SQL standardı ISO/IEC 9075:2023 özeti gibi makaleler ANSI ve ISO standartlarının zamanla nasıl hizalandığını açıklar.

Standart kendisi şu gibi birden fazla parçaya ayrılmıştır:

  • Bölüm 1 (Framework) ve Bölüm 2 (Foundation)
  • API'ler için Bölüm 3 (Call-Level Interface)
  • saklı yordamlar için Bölüm 4 (Persistent Stored Modules)
  • SQL/XML, SQL/MED ve hatta özellik grafik sorguları için SQL/PGQ gibi sonraki bölümler

Tam listeyi SQL için ISO katalog sayfasında ve Modern SQL'in standart bölümlerinin dökümü gibi kaynaklarda görebilirsiniz.

Pratikte, her veritabanı kendi lehçesini uygular:

Temel kavramlar—tablolar, satırlar, sütunlar, birleştirmeler, toplamalar—taşınabilir, ancak önemsiz olmayan herhangi bir sistem, belirli bir lehçenin tuhaflıklarını ve özelliklerini öğrenmeyi içerecektir.

3. İlişkisel Temeller: Tablolar, Satırlar, Anahtarlar

Özünde, SQL ilişkisel model etrafında tasarlanmıştır: veriler tablolarda (ilişkiler) yaşar, burada her satır bir gerçeği temsil eder ve her sütun bir özniteliği açıklar.

Tipik öğeler şunları içerir:

  • Tablo: örn. customers, orders
  • Sütun: örn. id, name, order_date, total_amount
  • Birincil anahtar: her satır için benzersiz bir tanımlayıcı (genellikle bir id)
  • Yabancı anahtar: başka bir tablonun birincil anahtarına referans veren bir sütun (örn. orders.customer_id customers.id)

Normalizasyon kılavuzları— DigitalOcean'ın normalizasyon öğreticisi veya freeCodeCamp'in 1NF, 2NF, 3NF açıklaması gibi—iyi ilişkisel tasarımı, verileri iyi yapılandırılmış tablolara bölerek ve bunları anahtarlarla birbirine bağlayarak yedekliliği en aza indirme ve güncelleme anormalliklerini önleme olarak çerçeveler.

SQL ile sorguladığınızda, temelde veritabanına şunu soruyorsunuz: "Bu tablolardan, bu koşullar altında, hangi satırları ve sütunları görmem gerekir?"

4. Temel Sorgu: SELECT

SELECT ifadesi SQL'in iş gücü ve tartışmasız en karmaşık komutudur. SQLite SELECT referansı bunu "SQL dilindeki en karmaşık komut" olarak adlandırır ve hem MySQL'in SELECT dokümantasyonu hem de SQLite Tutorial'ın SELECT kılavuzu gibi öğreticiler birçok seçeneğini adım adım gösterir.

SELECT id, name
FROM customers;

Anahtar bölümler:

  • SELECT sütunları listeler (veya tüm sütunlar için *, ancak açık olmak genellikle daha iyidir).
  • FROM bir veya daha fazla tablo seçer.
  • WHERE satırları filtreler.
  • ORDER BY sonuçları sıralar.
  • LIMIT gördüğünüz satır sayısını kısıtlar.
SELECT id, name, created_at
FROM customers
WHERE active = TRUE
ORDER BY created_at DESC
LIMIT 50;

W3Schools SQL öğreticisi ve W3Schools MySQL'in ortak komutlara genel bakışı gibi giriş öğreticileri, SELECT kullanarak verileri tablolardan tek bir, okunabilir ifadede nasıl çıkardığınızı gösterir.

5. Filtreleme, Sıralama ve İfadeler

SQL, filtrelemeyi ve ifadeleri sorguda doğrudan birleştirdiğinizde parlar:

SELECT
  id,
  total_amount,
  total_amount * 0.1 AS tax_estimate
FROM orders
WHERE status = 'paid'
  AND total_amount >= 100
ORDER BY total_amount DESC;

WHERE yan tümcesi karşılaştırma operatörlerini (=, <>, >, <), mantıksal operatörleri (AND, OR, NOT), desen eşleştirmeyi (LIKE, ILIKE) ve daha fazlasını kullanabilir. MySQL gibi veritabanları, yerleşik işlevler ve operatörler için sayısal, dize, tarih/saat, JSON ve diğer işlemler için zengin bir set dokümante eder.

Ayrıca şunları yapabilirsiniz:

  • bir listeyle eşleştirmek için IN kullanın: WHERE status IN ('paid', 'refunded')
  • aralıklar için BETWEEN kullanın: WHERE created_at BETWEEN '2025-01-01' AND '2025-01-31'
  • eksik değerleri işlemek için IS NULL / IS NOT NULL kullanın

İyi öğreticiler ve kılavuzlar, ifadelerin birçok yan tümcede—WHERE, ORDER BY, HAVING ve hatta SELECT kendisinde—göründüğünü vurgular. MySQL dokümantasyonu bunu işlevler ve operatörler bölümü içindeki ifade değerlendirme bölümlerinde vurgular.

6. Tabloları Birleştirme

Gerçek veritabanları nadiren her şeyi tek bir tabloda tutar. Bunun yerine, verileri birden fazla tabloya normalize edersiniz ve sorguladığınızda bunları birleştirirsiniz. Birleştirmeler, W3Schools'un SQL birleştirmeleri sayfası, GeeksforGeeks'in birleştirme öğreticisi, TutorialsPoint'in birleştirme genel bakışı ve SQL Practice Online'daki SQL birleştirmeleri öğreticisi gibi kaynaklarda kapsamlı olarak ele alınmıştır.

SELECT
  o.id,
  c.name,
  o.order_date,
  o.total_amount
FROM orders AS o
JOIN customers AS c
  ON c.id = o.customer_id;

Yaygın birleştirme türleri:

  • INNER JOIN – her iki tabloda da eşleşmeleri olan satırlar
  • LEFT JOIN – sol tablodaki tüm satırlar, artı sağdan eşleşmeler
  • RIGHT JOIN – sol birleştirmenin tersi (SQLite gibi bazı motorlarda desteklenmez)
  • FULL OUTER JOIN – eşleşmemiş olsa bile her iki taraftan satırlar

DbSchema'nın "SQL birleştirmeleri açıklandı" makalesi veya LearnSQL.com'un birleştirme örnekleri gibi görsel ve kod ağırlıklı açıklamalar, birleştirmelerin nasıl davrandığına dair güçlü bir sezgi oluşturmanın harika yollarıdır.

7. Toplama, Gruplama ve Pencere İşlevleri

Verileri özetlemek için—toplamlar, ortalamalar, sayımlar— toplama işlevlerini (COUNT, SUM, AVG, MIN, MAX) GROUP BY ile kullanırsınız:

SELECT
  customer_id,
  COUNT(*) AS order_count,
  SUM(total_amount) AS total_spent
FROM orders
WHERE status = 'paid'
GROUP BY customer_id
HAVING SUM(total_amount) >= 1000
ORDER BY total_spent DESC;

MySQL'in işlevler ve operatörler bölümü ve PostgreSQL'in toplama ve pencere işlevleri dokümantasyonu gibi referanslar, bu ifadelerde kullanabileceğiniz yerleşik işlevleri kataloglar.

Modern SQL ayrıca pencere işlevlerini destekler; bu, hala bireysel satırları döndürürken kaydırılabilir satır "pencereleri" üzerinden toplamaları hesaplamanıza olanak tanır—örneğin, çalışan toplamlar veya sıralamalar. Pencere işlevleri SQL:1999'a yapılan değişiklikler aracılığıyla SQL'e girdi, daha sonra SQL:2003'e entegre edildi, SQL:1999 ve SQL:2003 standartları hakkındaki notlarda özetlendiği gibi.

SELECT
  customer_id,
  order_date,
  total_amount,
  SUM(total_amount) OVER (
    PARTITION BY customer_id
    ORDER BY order_date
  ) AS running_total
FROM orders;

Bu tür bir sorgu, veritabanında doğrudan analitik için son derece güçlüdür.

8. Veri Tanımı: Şemalar Oluşturma ve Geliştirme

SQL sadece sorgulama için değildir; ayrıca Data Definition Language (DDL) ifadeleri aracılığıyla verilerinizin şeklini tanımlar, PostgreSQL'in Veri Tanımı kılavuzu ve MySQL'in SQL ifadeleri bölümü gibi bölümlerde iyi belgelenmiştir.

Yaygın DDL komutları:

  • CREATE DATABASE my_app; – bir veritabanı oluştur
  • CREATE TABLE customers (...); – bir tablo tanımla
  • ALTER TABLE customers ADD COLUMN phone TEXT; – tablo yapısını değiştir
  • DROP TABLE customers; – bir tabloyu kaldır
CREATE TABLE customers (
  id           SERIAL PRIMARY KEY,
  email        VARCHAR(255) UNIQUE NOT NULL,
  name         TEXT NOT NULL,
  created_at   TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  active       BOOLEAN NOT NULL DEFAULT TRUE
);

Not edilmesi gerekenler:

  • Veri türleri: tamsayılar, dizeler, tarihler, boolean'lar, JSON, vb.
  • Kısıtlamalar: PRIMARY KEY, UNIQUE, NOT NULL, CHECK ifadeleri
  • Varsayılan değerler ve oluşturulan sütunlar

Her büyük RDBMS kılavuzu—PostgreSQL'in SQL dili bölümü, MySQL'in referans kılavuzuve SQLite'in dil referansı—DDL hakkında dikkatli düşünmeyi vurgular, çünkü şema kararları daha sonra değiştirmek zordur.

9. İşlemler, Eşzamanlılık ve Kısıtlamalar

SQL veritabanları genellikle ACID özelliklerini— Atomicity, Consistency, Isolation, Durability— işlemler aracılığıyla uygular:

BEGIN;

UPDATE accounts
SET balance = balance - 200
WHERE id = 1;

UPDATE accounts
SET balance = balance + 200
WHERE id = 2;

COMMIT;

BEGIN ve COMMIT arasında bir şey başarısız olursa, işlem ara değişikliklerin veritabanına sızmasını önlemek için geri alınabilir.

MySQL'in işlemsel ve kilitleme ifadeleri bölümü START TRANSACTION, COMMIT, ROLLBACK ve kayıt noktalarını kapsar, PostgreSQL'in eşzamanlılık kontrolü ve işlem yönetimi bölümleri izolasyon seviyelerinin ve MVCC'nin kaputun altında nasıl çalıştığını açıklar.

Kısıtlamalar—yabancı anahtarlar veya kontrol kısıtlamaları gibi—veritabanının iş kurallarını uygulama yoludur:

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customer
FOREIGN KEY (customer_id)
REFERENCES customers (id);

İyi kullanıldığında, veritabanınızı değişmezliklerin koruyucusu haline getirirler, yalnızca uygulama mantığına güvenmek yerine kaynakta geçersiz verileri önlerler.

10. Şema Tasarımı ve Normalizasyon

Şemayı doğru almak genellikle akıllı sorgulardan daha önemlidir. Normalizasyon, tabloları yapılandırarak yedekliliği azaltma ve tutarlılığı iyileştirme sürecidir. Şu gibi öğreticiler:

Tipik ilerleme:

  • 1NF: tekrarlayan gruplar yok; her sütun atomik değerler tutar.
  • 2NF: her anahtar olmayan öznitelik tüm birincil anahtara bağlıdır (bileşik anahtarlar için).
  • 3NF: geçişli bağımlılıklar yok (anahtar olmayan öznitelikler diğer anahtar olmayan özniteliklere bağlı değildir).

Aşırı normalizasyon performansı zarar verebilir ve sorguları karmaşıklaştırabilir; pragmatik ekipler genellikle 3NF'ye normalize eder ve ardından performansın gerektirdiği yerlerde seçici olarak denormalize eder (örneğin, toplamaları önbelleğe alarak).

11. İndeksler ve Sorgu Performansı

İndeksler SQL sorgularını hızlandırmak için birincil araçtır. Bunlar yardımcı veri yapılarıdır ve veritabanının tüm tabloları taramak yerine doğrudan ilgili satırlara atlamasına olanak tanır.

İndeksleme konusunda derinden saygı duyulan bir kaynak, Markus Winand'ın Use The Index, Luke! adlı eseridir; bu, tamamen SQL performansına ve indeksleme stratejisine odaklanan ücretsiz bir çevrimiçi kitaptır. Sitenin ana sayfası, UseTheIndexLuke.comve "LIKE filtrelerini indeksleme" ve "Daha fazla indeks, daha yavaş INSERT" gibi makaleler indekslerin ne zaman yardımcı olduğunu ve ne zaman zarar verdiğini açıklar.

Anahtar fikirler:

  • B-tree indeksleri eşitlik ve aralık aramalarını hızlandırır (WHERE email = ..., WHERE created_at >= ...).
  • Bileşik indeksler sütun sırasını dikkate alır—örneğin, (customer_id, created_at) WHERE customer_id = ? AND created_at >= ? için iyi çalışır.
  • İndeksler filtrelerle SELECT, UPDATE ve DELETE 'e yardımcı olur, ancak eklemeleri yavaşlatır çünkü her ekleme tüm ilgili indeksleri güncellemelidir.

MSSQLTips'in SQL Server indeksleri tasarlama makalesi gibi kılavuzlar, bir indeksteki sütun seçiminin ve sıralamasının gerçek sorguları nasıl etkilediğini gösterir.

Pratik genel kurallar:

  • Birincil anahtarlarınızı ve sık kullanılan birleştirme/filtre sütunlarını indeksleyin.
  • Her sütunu indekslemekten kaçının—çok fazla indeks yazma performansını öldürür.
  • Veritabanının EXPLAIN/EXPLAIN ANALYZE kullanarak sorguların nasıl yürütüldüğünü görün.

12. Modern SQL Özellikleri: CTE'ler, JSON ve Ötesi

Temeller sabit kalsa da, modern SQL önemli ölçüde büyümüştür:

  • WITH aracılığıyla Common Table Expressions (CTE) daha okunabilir, modüler sorgulara izin verir:
    WITH recent_orders AS (
      SELECT *
      FROM orders
      WHERE order_date >= CURRENT_DATE - INTERVAL '7 days'
    )
    SELECT customer_id, COUNT(*) 
    FROM recent_orders
    GROUP BY customer_id;
  • JSON desteği yarı yapılandırılmış verileri ilişkisel tablolarla karıştırmanıza olanak tanır. PostgreSQL, MySQL ve diğerleri kılavuzlarında kapsamlı JSON işlevlerini dokümante eder, örneğin MySQL'in JSON işlevleri altında listelenen JSON özellikleri.
  • Gelişmiş veri türleri (diziler, hstore, geometri, tam metin arama) PostgreSQL'in veri türü ve indeks bölümlerinde PostgreSQL kılavuzu boyunca açıklanmıştır.

SQL standardının kendisi XML, çok boyutlu diziler ve özellik grafik sorguları için bölümler eklemiştir, ISO SQL standardı kataloğunda ve ANSI SQL standardı makalesi gibi SQL'in evrimi hakkındaki yazılarda belgelendiği gibi.

Modern SQL, birçok uygulamanın karmaşık mantığı—hiyerarşiler, analitik, olay işleme—veritabanı katmanına itmesine yetecek kadar güçlüdür.

13. SQL'i Etkili Öğrenme

SQL veri çalışması için temel kaldığından, zengin bir öğrenme kaynakları ekosistemi vardır:

Pratik bir öğrenme stratejisi:

  1. SELECT ve temel filtrelemeyi ustalaştırın. Basit sorgularla başlayın ve kademeli olarak WHERE, ORDER BYve LIMIT ekleyin.
  2. Birleştirmelerle rahat olun. Tüm birleştirme türlerini sonuçları güvenle tahmin edebilene kadar pratik yapın.
  3. Gruplama ve toplamayı ekleyin. GROUP BY ile "aylık gelir" veya "en iyi 10 müşteri" gibi soruları yanıtlamayı öğrenin.
  4. Şema tasarımını öğrenin. Normalizasyonu inceleyin ve gerçek sistemleri—örneğin mağazalar, rezervasyon sistemleri, sosyal ağlar—modelleme pratiği yapın.
  5. Favori motorunuzun özelliklerini keşfedin. Veritabanınızın resmi dokümantasyonunu okuyun—PostgreSQL'in SQL dili bölümü, MySQL'in referans kılavuzuveya SQLite'in dil referansı—motor özel araçları keşfetmek için.
  6. Son olarak, performansı öğrenin. Use The Index, Luke! ve benzer kaynaklardaki kavramları kullanarak indekslerle deney yapın ve EXPLAIN ile sorguları profilleştirin.

SQL'i rahatça okuyup yazabiliyorsanız, verileri doğrudan üretimde inceleyebilir, elektronik tablolara aktarmadan raporlar oluşturabilir, temel tablolara bakarak uygulama mantığını hata ayıklayabilir ve mühendisler ve analistlerle daha etkili işbirliği yapabilirsiniz.

14. Büyük Resim

SQL benzersiz bir kesişimde durur: 40 yaşından büyüktür, ancak bugün bulut yerel, analitik ağırlıklı sistemlerde derinden alakalıdır. ISO/IEC 9075 standardı ve birçok bölümü evrimleşmeye devam ederken, PostgreSQL, MySQLve SQLite gibi açık kaynaklı veritabanları pratik özellikler ve performans iyileştirmeleri sunar.

Verilerle çalışıyorsanız—geliştirici, analist, veri bilimcisi veya ürün yöneticisi—SQL size veritabanına doğrudan soru sormanızı sağlayan ortak dildir. Bir kez öğrenmeye değer ve kariyerinizin geri kalanı için ödeme yapar.

Sık Sorulan Sorular

SQL formatlama nedir?

SQL formatlama, okunabilirliği ve bakımı iyileştirmek için uygun girintileme, satır sonları ve anahtar kelime büyük/küçük harf kullanımı ile SQL sorgularını düzenleme sürecidir.

Hangi SQL lehçeleri destekleniyor?

Formatlayıcımız MySQL, PostgreSQL, SQL Server, SQLite, Oracle ve diğer birçok SQL lehçesini destekler.

SQL kodum güvenli mi?

Evet! Tüm SQL formatlama tamamen tarayıcınızda gerçekleşir. Sorgularınız asla bilgisayarınızdan ayrılmaz, tam gizlilik ve güvenlik sağlar.

Birden fazla SQL ifadesini formatlayabilir miyim?

Evet, birden fazla SQL ifadesini aynı anda formatlayabilirsiniz. Formatlayıcı, seçilen lehçeye göre her ifadeyi uygun şekilde işleyecektir.

SQL'imde sözdizimi hatası varsa ne olur?

Formatlayıcı, sözdizimi hataları içerse bile SQL'inizi formatlamaya çalışacaktır. Ancak, ayrıştırılamayan geçersiz SQL için hata mesajları görebilirsiniz. SQL'inizi her zaman veritabanı sisteminizle doğrulayın.