İçeriğe atla
Makale

SQL Nedir, Ne Demek? SQL Komutları, MySQL ve SQL Server

SQL'in nasıl çalıştığını, ISO/IEC 9075 standardını, DDL, DML, DCL ve TCL komutlarını, lehçelerini ve SQL injection'a karşı alınacak önlemleri anlattık.

Oğuzhan Gerçek··7 dk okuma
SQL Nedir, Ne Demek? SQL Komutları, MySQL ve SQL Server

Kısa cevap: SQL (Structured Query Language), ilişkisel veritabanlarında veriyi tanımlamak, sorgulamak ve değiştirmek için kullanılan standart dildir. Bildirimsel çalışır: hangi veriyi istediğinizi yazarsınız, ona hangi yoldan ulaşılacağına veritabanı karar verir. Standardın resmî adı ISO/IEC 9075, güncel sürümü SQL:2023. MySQL, PostgreSQL, SQL Server, Oracle ve SQLite bu dili konuşur ama her birinin kendi lehçesi var. Güvenlikte temel kural, kullanıcı girdisini sorgu metnine eklememek ve parametreli sorgu kullanmaktır.

SQL nedir, ne demek?

SQL, Structured Query Language (yapılandırılmış sorgu dili) ifadesinin kısaltması. IBM'in Db2 belgesi onu ilişkisel veritabanında veriyi tanımlamak ve değiştirmek için kullanılan standart dil olarak anlatıyor. Oracle'ın tanımıyla SQL bildirimsel bir dil: kullanıcı istediği sonucu belirtir, o sonuca nasıl varılacağını değil. Veriyi tek tek satırlarla değil, kümeler hâlinde işler; Oracle'ın başvuru belgesine göre en verimli erişim yolunu optimizer belirler.

IBM Research kaydına göre E. F. Codd, ilişkisel modeli 1 Haziran 1970'te Communications of the ACM'de yayımlanan "A Relational Model of Data for Large Shared Data Banks" makalesinde tanımladı. Makalenin ilk cümlesi SQL'in mantığını da özetliyor: büyük veri bankalarının kullanıcıları, verinin makinede nasıl düzenlendiğini bilmek zorunda kalmamalı. Donald D. Chamberlin ile Raymond F. Boyce, bu modele dayanan dili Mayıs 1974'te yayımladıkları makalede SEQUEL (Structured English Query Language) adıyla tanıttı. Oracle'ın SQL tarihçesine göre SEQUEL zamanla SQL adını aldı.

SQL standardı: ISO/IEC 9075

Oracle'ın belgesine göre ANSI ve ISO/IEC, SQL'i ilişkisel veritabanlarının standart dili olarak kabul ediyor. Standardın ilk ISO sürümü Haziran 1987'de ISO 9075:1987 adıyla çıktı. Güncel sürüm SQL:2023: çerçeveyi ISO/IEC 9075-1:2023, dilin çekirdeğini ISO/IEC 9075-2:2023 tanımlıyor ve ikisi de Haziran 2023 tarihli. ISO kataloğu, Haziran 2025'ten beri standardı "revize edilecek" aşamasında gösteriyor.

Ürünler standarda birebir uymaz. PostgreSQL'in uyumluluk belgesine göre proje, Core uyumu için gereken 177 zorunlu özelliğin en az 170'ini karşılıyor. Bir sistemde çalışan sorgunun ötekinde değişiklik istemesi bu yüzden olağan.

Temel kavramlar: tablo, anahtar, indeks ve transaction

PostgreSQL'in eğitim belgesine göre ilişkisel veritabanında veri tablolarda durur: her tablo adlandırılmış satırlardan oluşur, satırlar aynı adlı sütunları taşır ve her sütunun bir veri tipi vardır. SQL satırların sırasını garanti etmez; sıra gerekiyorsa ORDER BY yazılır. PostgreSQL sözlüğüne göre öteki temel kavramlar şunlar:

  • Birincil anahtar (primary key): Satırı tekil olarak tanımlayan, NULL olamayan sütun ya da sütunlar; tabloda yalnızca bir tane olur.
  • Yabancı anahtar (foreign key): Sütundaki değerin başka bir tablodaki satırı göstermesini zorunlu kılan kısıt.
  • JOIN: Birden fazla tablodaki veriyi tek sorguda birleştiren işlem.
  • İndeks: Satırlara hızlı erişim sağlayan yapı. Belgelere göre veri değiştiren işlemlere ek yük getirir; seyrek kullanılan indeks kaldırılmalıdır.
  • Transaction: Ya hepsi uygulanan ya da hiçbiri uygulanmayan komut grubu. PostgreSQL'de BEGIN ile açılır, COMMIT ile kalıcı olur, ROLLBACK ile geri alınır.

Transaction'ın ACID güvencelerini VTYS yazımızda anlattık; veritabanı teriminin kısa tanımı sözlüğümüzde var. Aşağıdaki tanım, anahtarlı iki tablo oluşturur:

CREATE TABLE musteri (
  id  integer PRIMARY KEY,
  ad  text NOT NULL
);
CREATE TABLE siparis (
  id          integer PRIMARY KEY,
  musteri_id  integer NOT NULL REFERENCES musteri (id),
  tarih       date NOT NULL,
  tutar       numeric(12,2) NOT NULL
);

SQL komutları: DDL, DML, DCL ve TCL

SQL ifadeleri işlevlerine göre dört grupta anılır. Sınırlar kesin değil: IBM DDL, DML ve DCL adlarının gayriresmî olduğunu belirtiyor, Oracle ise GRANT ve REVOKE'u DDL içinde sayıyor.

  • DDL (Data Definition Language): Nesneleri tanımlar, değiştirir ve kaldırır (CREATE, ALTER, DROP).
  • DML (Data Manipulation Language): Veriyi okur ve değiştirir (SELECT, INSERT, UPDATE, DELETE, MERGE).
  • DCL (Data Control Language): Yetkiyi yönetir (GRANT, REVOKE).
  • TCL (Transaction Control): DML değişikliklerini kalıcı kılar ya da geri alır (COMMIT, ROLLBACK, SAVEPOINT); Oracle bu gruba "transaction control statements" diyor.

SQL sorguları: SELECT, WHERE ve JOIN

Aşağıdaki PostgreSQL sorgusu, 2026 başından beri verilen siparişleri müşteri adlarıyla birleştirir, tutara göre sıralar ve ilk on satırı döndürür:

SELECT m.ad, s.tarih, s.tutar
FROM siparis AS s
JOIN musteri AS m ON m.id = s.musteri_id
WHERE s.tarih >= DATE '2026-01-01'
ORDER BY s.tutar DESC
FETCH FIRST 10 ROWS ONLY;

JOIN, siparişteki musteri_id değerini müşterinin birincil anahtarıyla eşleştirir; eşleşmeyen sipariş sonuca girmez. LEFT JOIN ise soldaki tablonun her satırını getirir; sağdaki tabloda karşılığı yoksa o sütunlar NULL gelir.

Son satır bir lehçe farkı örneği. FETCH FIRST, SQL:2008'in standart sözdizimi; PostgreSQL bunu destekler, aynı işi LIMIT ile de yapar ve LIMIT'i MySQL de kullanır. SQL Server'da satır sayısını TOP ya da OFFSET ve FETCH sınırlar; Microsoft, TOP'u her zaman ORDER BY ile kullanmayı öneriyor.

SQL lehçeleri: MySQL, PostgreSQL, SQL Server, Oracle ve SQLite

Oracle'a göre IF, döngü ve hata yakalama gibi akış denetimi ifadeleri başlangıçta SQL'de yoktu; bugün ISO/IEC 9075-4 (SQL/PSM) içindeler. Başlıca sistemler şöyle ayrışıyor:

SQL, VTYS ve NoSQL farkı

SQL bir dil; MySQL, PostgreSQL ya da SQL Server onu çalıştıran veritabanı yönetim sistemleri. AWS'nin karşılaştırmasına göre ilişkisel model veriyi tablolara normalize eder ve ACID özelliklerini sağlar. NoSQL veritabanları ise anahtar-değer, belge, graf ve sütun gibi modeller ve esnek şema kullanır; çoğu, ACID özelliklerinin bir kısmından ödün verir ve genellikle bölümlenebilir. Ayrıntısı NoSQL yazımızda.

SQL güvenliği: SQL injection, en az yetki ve denetim logu

OWASP'a göre SQL injection, kullanıcı girdisinin metin birleştirmeyle sorguya eklendiği dinamik sorgularda doğar. OWASP Top 10:2025'te Injection üçüncü sıradan beşinciye indi; listeye göre SQL injection için 14 binden fazla CVE kaydı var. Üç önlem öne çıkıyor:

  • Parametreli sorgu: OWASP'ın ilk savunması prepared statement. Değer sorguya ayrı parametre olarak gider; veritabanı kodu veriden her durumda ayırır. Girdiyi kaçış karakterleriyle temizlemek ise OWASP'a göre "kesinlikle önerilmez".
  • En az yetki: Uygulama hesabına DBA ya da yönetici yetkisi verilmez; yalnız okuyan hesap, yalnız gereken tablolarda okuma yetkisi alır (IAM yazımız).
  • Denetim logu: PostgreSQL'de log_statement ayarı ddl değerinde CREATE, ALTER ve DROP'u, mod değerinde ayrıca INSERT, UPDATE ve DELETE'i kaydeder; varsayılanı none. SQL Server'da bu işi SQL Server Audit üstlenir (log yazımız).

Uygulamanın önündeki savunmayı WAF yazımızda anlattık.

Kurumda SQL: kim yazar, kim işletir?

Stack Overflow'un 2026 anketinde dil sorusunu cevaplayan 14.099 geliştiricinin %58,4'ü son bir yılda SQL ile yoğun geliştirme yaptığını söyledi; SQL bu listede JavaScript'in (%62,0) ardından ikinci sırada. AWS'ye göre yönetilen bir veritabanında bile sorgu ayarı (query tuning) müşterinin işi.

Veritabanını işleten rolü DBA yazımızda, yedek türlerini yedekleme yazımızda, verinin raporlama sistemlerine taşınmasını ETL yazımızda anlattık. Günlük işletimi veritabanı platformu ve operasyonları, yüksek erişilebilirlik tasarımını veritabanı platform mühendisliği, eski sistemden geçişi uygulama ve veritabanı modernizasyonu hizmetimizde ele alıyoruz.

Sık sorulan sorular

SQL ne demek? Structured Query Language, yani yapılandırılmış sorgu dili demek. İlişkisel veritabanlarının standart dilidir; resmî standardı ISO/IEC 9075.

MySQL nedir? Oracle Corporation'ın geliştirdiği, GPL lisanslı açık kaynak bir ilişkisel veritabanı yönetim sistemidir. Veriyi tablolarda tutar ve SQL ile sorgulanır.

SQL Server nedir? Microsoft'un ilişkisel veritabanı yönetim sistemidir. Uygulamalar onunla, SQL'in Microsoft uzantısı olan T-SQL üzerinden konuşur.

SQL ile MySQL arasındaki fark nedir? SQL bir dil, MySQL ise bu dili çalıştıran bir veritabanı yönetim sistemi. MySQL, standardın yanında LIMIT gibi kendi sözdizimini de kullanır.

SQL sorguları ve komutları nelerdir? Veriyi okuyan SELECT ile veriyi değiştiren INSERT, UPDATE ve DELETE, DML grubundadır. CREATE (DDL), GRANT (DCL) ve COMMIT (TCL) öteki grupların örnekleri.

SQL injection nedir? Kullanıcı girdisi sorgu metnine eklendiğinde saldırganın sorguyu değiştirebilmesidir. OWASP'ın ilk önerisi parametreli sorgu (prepared statement) kullanmaktır.

Kaynaklar