SQL Formatla
Ö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:
- PostgreSQL, PostgreSQL kılavuzu boyunca belgelenmiş gelişmiş veri türleri ve tam metin arama gibi uzantılar ekler.
- MySQL, SQL ifadeleri ve işlevler için kendi tarzına sahiptir.
- SQLite, bazı benzersiz davranışlarla SQL'in önemli bir alt kümesini destekler, SELECT dokümantasyonunda detaylandırılmıştır.
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:
SELECTsütunları listeler (veya tüm sütunlar için*, ancak açık olmak genellikle daha iyidir).FROMbir veya daha fazla tablo seçer.WHEREsatırları filtreler.ORDER BYsonuçları sıralar.LIMITgö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
INkullanın:WHERE status IN ('paid', 'refunded') - aralıklar için
BETWEENkullanın:WHERE created_at BETWEEN '2025-01-01' AND '2025-01-31' - eksik değerleri işlemek için
IS NULL/IS NOT NULLkullanı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şturCREATE TABLE customers (...);– bir tablo tanımlaALTER TABLE customers ADD COLUMN phone TEXT;– tablo yapısını değiştirDROP 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,CHECKifadeleri - 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:
- "SQL'de veritabanı normalizasyonu — 1NF, 2NF, 3NF açıklandı"
- DigitalOcean'ın normalizasyon kılavuzu
- DBMS'de normal formlar hakkında GeeksforGeeks
- Guru99'un 1NF–6NF genel bakışı
- Visual Paradigm'in normalizasyon seviyeleri kılavuzu
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,UPDATEveDELETE'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 ANALYZEkullanarak 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:
WITHaracı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:
- W3Schools SQL öğreticisi ve W3Schools.in SQL kurs dizini gibi etkileşimli öğreticiler tarayıcı içi düzenleyiciyle sözdizimi, sorgular ve örnekleri kapsar.
- W3Schools SQL eğitimi ve SQL Bootcamp gibi yapılandırılmış eğitimler alıştırmalar, otomatik puanlama ve sertifikasyon sağlar.
- SQL Practice Online'ın birleştirme öğreticisi gibi uygulama odaklı siteler ve diğerleri çözülecek gerçek problemler sunar.
- Use The Index, Luke! gibi özel kaynaklar performansa ve indekslemeye odaklanır, temel SQL ile üretim seviyesi ayarlama arasındaki boşluğu kapatır.
Pratik bir öğrenme stratejisi:
- SELECT ve temel filtrelemeyi ustalaştırın. Basit sorgularla başlayın ve kademeli olarak
WHERE,ORDER BYveLIMITekleyin. - Birleştirmelerle rahat olun. Tüm birleştirme türlerini sonuçları güvenle tahmin edebilene kadar pratik yapın.
- Gruplama ve toplamayı ekleyin.
GROUP BYile "aylık gelir" veya "en iyi 10 müşteri" gibi soruları yanıtlamayı öğrenin. - Ş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.
- 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.
- Son olarak, performansı öğrenin. Use The Index, Luke! ve benzer kaynaklardaki kavramları kullanarak indekslerle deney yapın ve
EXPLAINile 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.